繁体   English   中英

SQL Server:表的串联和总计

[英]SQL Server : concatenation and sum totals from tables

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

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

我有以下四个表:

  • 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

我需要做的是总和的PRICEPRODUCT表和PRICESERVICE_表中的每个预约/客户和列表,在第一列用自己的名字和姓氏一起串联。

结果如下所示:

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;

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

在不了解您的数据的情况下(假设您的逻辑和联接正确),您似乎只需要按计算出的客户名称分组即可获得总计。 这将返回所有客户-您可能要向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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM