表B包含計劃值。表M保存實際值。我需要查找表B中的所有行,其中表M中沒有實際值(即已連接)的行,或者連接的行具有不同的總實際值行。我正在嘗試外部連接和總和... group by的組合來實現此目的,但它不起作用,因爲表B中的'孤兒'沒有被返回。具有左連接的SQL Server /具有總和/組編號
我的查詢是: -
SELECT B.Id, B.Date, b.Ref,SUM(M.Actual_Volume), SUM(B.Planned_Volume),
SUM(M.Actual_Value),SUM(B.Planned_Value)
FROM
TableB B
left JOIN TableM M on M.Id = B.Id
inner JOIN TableX on TableX.FieldX = B.FieldX
WHERE TableX.FieldY = (SELECT T.FieldY from TableX T where T.FieldX = 408344)
AND TableX.FieldZ = (SELECT T1.FieldZ from TableX T1 where T1.FieldX = 408344)
group by B.Id, B.Date, B.Ref
having SUM(M.Actual_Volume) <> SUM(B.Planned_Volume)
OR SUM(M.Actual_Value) <> SUM(B.Planned_Value)
order by b.Id
如果我使用的,而不是= <>比較實際值和計劃我得到的加入行,但我需要在實際值不等於計劃的行,或者哪裏有計劃但不是真實的。
謝謝!
Table B
Id planned_vol planned val
19 2 350
28 1 100
53 3 650
61 1 50
Table M
M.Id B.Id actual_vol actual_val
58 19 2 350
65 28 1 100
66 53 1 150
所以查詢應該返回,
B.Id
53 (because planned_vol <> actual_vol and planned_val <> actual_val)
61 (because B.Id 61 is not in table M)
心連心!
能否請您顯示行,你想退回(由於這兩個原因),你不一些示例數據和至少一個排想要返回。 – 2012-04-02 10:50:16
快速修復將添加'SUM(M.Actual_Volume)爲null或SUM(M.Actual_Value)爲null'的子句,但我認爲你試圖對n:m關係的兩邊進行求和。這將以數據重複結束。你能發佈更多關於你的模式和M和B之間的關係嗎? – 2012-04-02 11:07:00
是的,tableB到TableM是m:m,因爲定義表是tableX – epx 2012-04-02 11:14:22