SQL JOIN 3表,唯一行,跨表计算

时间:2011-10-13 17:43:23

标签: sql join

我有3张桌子。它们具有相同的列。我需要将它们合并到一个表中,这样我只有唯一的行,需要在3个表中计算金额列。

e.g。

表1

Name1,2,100.00

姓名5,3,25.00


表2

姓名1,2,50.00


表3

Name1,2,60.00


期望的结果:

Name1,2,90.00,即计算为(100-60 + 50)

姓名5,3,25.00

有什么想法吗?我已经尝试过联盟,但这不会为我计算或显示独特的行....

2 个答案:

答案 0 :(得分:3)

在这个解决方案中,我只是取了第二列的Min值,因为你没有指定如何在三个表中组合它。

Select Z.Name, Min( SomeInt ) As MinSomeInt
    , Sum( SomeDecimal ) As TotalSomeDecimal
From    (
        Select Name, SomeInt, SomeDecimal
        From Table1
        Union All
        Select Name, SomeInt, SomeDecimal
        From Table2
        Union All
        Select Name, SomeInt, SomeDecimal * -1
        From Table3
        ) As Z
Group By Z.Name

答案 1 :(得分:1)

非常明确的问题。使用UNION ALL将表组合成一个可查询的东西,然后使用GROUP BY组合共享值的行。

SELECT Col1, SUM(Col2) as Col2
FROM
(
SELECT Col1, Col2
FROM Table1
UNION ALL
SELECT Col1, Col2
FROM Table2
UNION ALL
SELECT Col1, Col2
FROM Table3
) as sub
GROUP BY Col1