具有多个表和结果的SQL查询

时间:2015-02-02 18:49:36

标签: sql

我有多个表需要链接在一起。我使用了连接但是我得到了重复的结果。

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')

有什么想法吗?

谢谢,

凯文

1 个答案:

答案 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