现在我有3张桌子
订单:
ID |日期|机器|规划
GoodPieces:
ID |日期|机器|件|产品
BadPieces:
ID |日期|机器|件|产品|成分
查询的输出是
日期|机器|规划| GoodPieces | BadPieces
实际查询是这样的:
SELECT
data.Date AS Date,
data.Machine AS Machine,
SUM(CASE WHEN data.type = 'Planning' THEN data.value END ) AS Planning,
SUM(CASE WHEN data.type = 'GoodPieces' THEN data.value END ) AS GoodPieces,
SUM(CASE WHEN data.type = 'BadPieces' THEN data.value END ) AS BadPieces
FROM
( SELECT
'Planning' AS Type,
Date AS Date,
Machine AS Machine,
Planning AS Value
FROM Orders
UNION ALL
SELECT
'GoodPieces',
Date,
Machine,
Pieces AS Value
FROM GoodPieces
UNION ALL
SELECT
'BadPieces'
Date,
Machine,
Pieces AS Value
FROM BadPieces ) AS data
GROUP BY
Date,
Machine
我的问题是,是否有办法用这3张表获得相同的输出
订单:
ID |日期|机|规划
GoodPieces:
OrderID |件|产品
BadPieces:
OrderID |件|产品|成分
谢谢,
答案 0 :(得分:5)
当然,只需在表格中LEFT JOIN
并总结相应的列:
SELECT
O.Date,
O.Machine,
SUM(COALESCE(O.Planning, 0)) AS Planning,
SUM(COALESCE(G.Pieces, 0)) AS GoodPieces,
SUM(COALESCE(B.Pieces, 0)) AS BadPieces
FROM
Orders O
LEFT JOIN
(SELECT G.OrderID,
SUM(COALESCE(G.Pieces, 0)) AS GoodPieces
FROM GoodPieces G
GROUP BY G.OrderID) G ON G.OrderID = O.ID
LEFT JOIN
(SELECT B.OrderID,
SUM(COALESCE(B.Pieces, 0)) AS BadPieces
FROM BadPieces B
GROUP BY B.OrderID) B ON B.OrderID = O.ID
GROUP BY
O.Date,
O.Machine;
演示:http://www.sqlfiddle.com/#!3/09a73/17
修改:已更新为处理@MikaelEriksson
在评论中提供的点。