SQL Server:表中的连接和总和

时间:2014-04-27 21:26:54

标签: sql sql-server

这是我的第一个存储过程,不知道我在做什么。也许你可以教我一些东西。

我正在尝试创建一个名为SPGET_CUSTOMER_BILL的过程,它应该显示客户连接的名字和姓氏的名称以及来自2个不同表格的数字总和,这将是他们的总账单。

我有这4张桌子:

  • SALON_CUSTOMER:CUST_ID,STY_ID,LAST_NAME,FIRST_NAME
  • APPOINTMENT:APPT_TIME,CUST_ID,STY_ID,SERVICE_ID,PROD_NUM
  • PRODUCT:PROD_NUM,PROD_TYPE,PROD_NAME,PROD_VENDOR,PRICE
  • SERVICE_:SERVICE_ID,SERVICE_DESC,EST_TIME,PRICE

我需要做的是为PRICE表中的PRODUCT和每个约会/客户的PRICE表中的SERVICE_求和,并列出它们的第一个和姓氏在第一列连接。

以下是结果需要:

CUSTOMER_NAME   TOTAL_BILL
-----------------------------    
JOHN DOE           45.64
JANE DOE           52.64

我可能已经离开了,但现在这里是我的代码,它现在非常混乱,我已经把它弄得太乱了。

CREATE PROCEDURE SPGET_CUSTOMER_BILL
AS 
    SELECT 
       RTRIM(FIRST_NAME) + ' ' + RTRIM(LAST_NAME) AS CUSTOMER_NAME,
       SUM(ISNULL(P.PRICE, 0) = ISNULL(S.PRICE, 0) TOTAL_BILL
    FROM 
       APPOINTMENT A
    INNER JOIN 
       SALON_CUSTOMER ON SALON_CUSTOMER.CUST_ID = A.CUST_ID
    INNER JOIN 
       PRODUCT P ON A.PROD_NUM = P.PROD_NUM
    INNER JOIN 
       SERVICE_ S ON S.SERVICE_ID = A.SERVICE_ID;

如果我将它们分开,它们可以正常工作。我只是无法让他们一起工作。如果你能教我一些关于我做错的事情,我将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

在不了解您的数据的情况下(假设您的逻辑和联接是正确的),您似乎只需要按计算的客户名称进行分组即可获得总数。这将返回所有客户 - 您可能希望向PROC添加CustomerId参数,然后向其添加WHERE过滤器?

CREATE PROCEDURE dbo.SPGET_CUSTOMER_BILL
AS 
    SELECT RTRIM(FIRST_NAME) + ' ' + RTRIM(LAST_NAME) AS CUSTOMER_NAME,
      SUM(ISNULL(P.PRICE, 0)) TOTAL_BILL
    FROM APPOINTMENT A
      INNER JOIN SALON_CUSTOMER ON SALON_CUSTOMER.CUST_ID = A.CUST_ID
      INNER JOIN PRODUCT P ON A.PROD_NUM = P.PROD_NUM
      INNER JOIN SERVICE_ S ON S.SERVICE_ID = A.SERVICE_ID
    -- WHERE?
    GROUP BY RTRIM(FIRST_NAME) + ' ' + RTRIM(LAST_NAME);