问题描述
我有类似的数据:
表SALE
:
PR_KEY TRAN_ID TRAN_NO TRAN_DATE CUSTOMER_ID USER_ID TABLE_ID PAY_TYPE_ID TOTAL_PRICE
-------------------------------------------------------------------------------------------
187 SALE 130511164 2012-05-27 0000 ADMIN 59 1 0
表Sale_detail
PR_KEY FR_KEY LIST_ORDER ITEM_ID PRICE AMOUNT
--------------------------------------------------------------
281 187 0.0000 9 10000 3
282 187 0.0000 tom 20000 2
我的问题是:
-
我有什么方法可以通过计算
sale.totalprice
(对于同一(SD.Price * SD.Amount)+(SD.Price * SD.Amount)
)将数据推送到FR_KEY
-
或创建一个视图以显示总价格,并以相同的计算方式
(SD.Price * SD.Amount)+ (SD.Price * SD.Amount)
(对于每个FR_KEY)
这是针对SQL Server的,FR_KEY
中的sale_detail
引用了Pr_key
表的Sale
。
我尝试-
SELECT dbo.SALE_DETAIL.PR_KEY,dbo.SALE_DETAIL.FR_KEY,SUM(dbo.SALE_DETAIL.PRICE * dbo.SALE_DETAIL.AMOUNT) AS Grand_total
FROM dbo.SALE_DETAIL,dbo.SALE JOIN SALE s
on s.PR_KEY = SALE_DETAIL.FR_KEY
WHERE SALE_DETAIL.PR_KEY = @FR_KEY
ORDER BY PR_KEY
我想要的结果是:
PR_KEY TRAN_ID USER_ID TABLE_ID PAY_TYPE_ID TOTAL_PRICE
187 SALE ADMIN 59 1 70000
解决方法
您提供的查询可以简化为:
SELECT sd.PR_KEY,sd.FR_KEY,SUM(sd.PRICE * sd.AMOUNT) AS Grand_total
FROM dbo.SALE_DETAIL sd
on s.PR_KEY = SALE_DETAIL.FR_KEY
WHERE sd.PR_KEY = @FR_KEY
GROUP BY sd.PR_KEY,sd.FR_KEY;
不需要JOIN
。但是GROUP BY
是。
您可以在下面查询第二个问题。
SELECT
SALE.PR_KEY,TRAN_ID,TRAN_NO,TRAN_DATE,CUSTOMER_ID,USER_ID,TABLE_ID,PAY_TYPE_ID,SUM(PRICE*AMOUNT) AS TOTAL_PRICE
FROM
SALE_DETAIL
INNER JOIN SALE
ON SALE_DETAIL.FR_KEY = SALE.PR_KEY
GROUP BY
SALE.PR_KEY,PAY_TYPE_ID
,
使用OUTER APPLY的完美机会
SELECT
PR_KEY,FR_KEY,O.Grand_total
FROM dbo.SALE OUTER APPLY
(
SELECT SUM(PRICE * AMOUNT) AS Grand_total FROM SALE_DETAIL WHERE FR_KEY =PR_KEY
GROUP BY FR_KEY
) O
WHERE PR_KEY = @FR_KEY
ORDER BY PR_KEY