我有多个表需要链接在一起。我使用了连接但是我得到了重复的结果。
Table1.ID1
Table1.ID2 (Multiple Values)
Table2.Cost linked to Table1.ID2 (Multiple Values)
Table3.Qty linked to Table1.ID2 (Multiple Values)
Table4.AddCost linked to Table1.ID2 (Multiple Values)
Where Table1.ID1 = 'Unique1'
我拥有的是:
Select
Table1.ID1, Table1.ID2,
Sum(Table2.Cost), Sum(Table3.QTY), Sum(Table4.AddCost)
From
Table1
inner join
Table2 on Table2.ID2 = Table1.ID2
Inner Join
Table3 on Table3.ID2 = Table2.ID2
Inner Join
Table4 on Table4.ID2 = Table2.ID2
Where
Table1.ID1 = 'Unique1'
Group by
Table1.ID1, Table1.ID2
Order by
Table1.ID2
问题是,Table1.ID2
有多个值匹配Table1.ID1
。表2,3和4是事务表,我想对与Table1.ID2
匹配的每个事务进行SUM。
我正在考虑使用For Each循环,但我听说循环不应该在SQL中使用。
我正在寻找的最终结果是:
'Table1.ID2 'A' | Sum table2 | Sum Table3 | Sum Table4 (Where Table2,3,4 = Table1.ID2 'A'; and where Table1.ID1 = 'Unique1')
'Table1.ID2 'B' | Sum table2 | Sum Table3 | Sum Table4 (Where Table2,3,4 = Table1.ID2 'B'; and where Table1.ID1 = 'Unique1')
'Table1.ID2 'C' | Sum table2 | Sum Table3 | Sum Table4 (Where Table2,3,4 = Table1.ID2 'C'; and where Table1.ID1 = 'Unique1')
有什么想法吗?
谢谢,
凯文
答案 0 :(得分:1)
问题是您在表2,3和4之间没有任何链接,因此查询实际上是交叉加入它们。
看起来你想要的结果需要用子查询来完成:
Select T1.ID1, T1.ID2, T2.Cost, T3.QTY, T4.AddCost
From Table1 T1
inner join (SELECT ID2, SUM(Cost) Cost FROM Table2 GROUP BY ID2) T2
on T2.ID2 = T1.ID2
Inner Join (SELECT ID2, SUM(QTY) QTY FROM Table3 GROUP BY ID2) T3
on T3.ID2 = T1.ID2
Inner Join (SELECT ID2, SUM(AddCost) AddCost FROM Table4 GROUP BY ID2) T4
on T4.ID2 = T1.ID2
Where T1.ID1 = 'Unique1'
Order by T1.ID2
或通过内联子查询:
Select
T1.ID1,
T1.ID2,
(SELECT SUM(Cost) FROM Table2 WHERE ID2 = T1.ID2) Cost,
(SELECT SUM(QTY) FROM Table3 WHERE ID2 = T1.ID2) QTY,
(SELECT SUM(AddCost) FROM Table4 WHERE ID2 = T1.ID2) AddCost
FROM Table1 T1
Where T1.ID1 = 'Unique1'
Order by T1.ID2