这是我的第一个存储过程,不知道我在做什么。也许你可以教我一些东西。
我正在尝试创建一个名为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;
如果我将它们分开,它们可以正常工作。我只是无法让他们一起工作。如果你能教我一些关于我做错的事情,我将不胜感激。谢谢。
答案 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);