[英]Multiple SUM in SQL Query including LEFT JOIN
我想顯示特定客戶的所有工作訂單,以及他欠我們的款項。
我的問題是,在當前查詢中,一旦有一個以上的產品(“ Work_Order_Products”表),乘以“ Work_Order_Products”表返回的記錄數即可。
有辦法解決這個問題嗎? 謝謝
SELECT
W.ID_WorkOrder AS ID_WorkOrder,
W.Number AS Number,
W.Date AS Date,
C.Name AS Name,
SUM(WOP.Quantity * WOP.Price) AS totProducts,
SUM(WOI.Times) AS totTimes
FROM Work_Order W
LEFT JOIN Work_Order_Products WOP ON WOP.ID_WorkOrder = W.ID_WorkOrder
LEFT JOIN Work_Order_Instructions WOI ON WOI.ID_WorkOrder = W.ID_WorkOrder
LEFT JOIN Customers C ON C.ID_WorkOrder = W.ID_Customer
WHERE W.ID_Customer = x
GROUP BY
ID_WorkOrder,
Number,
Date,
Name
我會嘗試相關子查詢而不是SUM:
更換:
SUM(WOI.Times) AS totTimes
有:
(
select SUM(WOI.Times) from Work_Order_Instructions WOI
where
WOI.ID_WorkOrder = W.ID_WorkOrder
) as totTimes
按照克里斯的建議,這可能會起作用:
SELECT
W.ID_WorkOrder AS ID_WorkOrder,
W.Number AS Number,
W.Date AS Date,
C.Name AS Name,
products.ProductCount AS totProducts,
Instructions.totTimes AS totTimes
FROM Work_Order W
LEFT JOIN
(SELECT WOP.ID_WorkOrder, SUM(WOP.Quantity * WOP.Price) AS ProductCount
FROM Work_Order_Products WOP
GROUP BY WOP.ID_WorkOrder) AS products
ON products.ID_WorkOrder = W.ID_WorkOrder
LEFT JOIN
(SELECT WOI.ID_WorkOrder, SUM(WOI.Times) AS totTimes
FROM Work_Order_Instructions WOI
GROUP BY WOI.ID_WorkOrder) AS Instructions
ON Instructions.ID_WorkOrder = W.ID_WorkOrder
LEFT JOIN Customers C ON C.ID_WorkOrder = W.ID_Customer
WHERE W.ID_Customer = x
GROUP BY
W.ID_WorkOrder,
Number,
Date,
Name
也就是說,使用括號來創建“子表”,這將需要它們自己的別名。 (這里可能存在語法錯誤。當然,我沒有運行此數據。)
為了避免使用Work_Order_Products
或Work_Order_Instructions
表中的Work_Order_Instructions
,請在加入表之前處理匯總。
SELECT
W.ID_WorkOrder AS ID_WorkOrder
,W.Number AS Number
,W.Date AS Date
,C.Name AS Name
,WOP.totProducts
,WOI.totTimes
FROM
Work_Order AS W
LEFT JOIN
(
SELECT
ID_WorkOrder
,SUM(Quantity * Price) AS totProducts
FROM
Work_Order_Products
GROUP BY
ID_WorkOrder
) AS WOP
ON
WOP.ID_WorkOrder = W.ID_WorkOrder
LEFT JOIN
(
SELECT
ID_WorkOrder
,SUM(Times) AS totTimes
FROM
Work_Order_Instructions
GROUP BY
ID_WorkOrder
) AS WOI
ON
WOI.ID_WorkOrder = W.ID_WorkOrder
LEFT JOIN
Customers AS C
ON
C.ID_WorkOrder = W.ID_Customer
WHERE
W.ID_Customer = x;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.