如何获取没有外键关系的三个不同表的列的总和

时间:2015-05-13 18:06:32

标签: sql-server

我有三个表,每个表具有共同的ID和不同的成本。 我需要将所有唯一id的cost1,cost2,cost3的总和显示为单个ResultSet。

表1:

id  cost1
1   100
1   100
2   200

表2:

id  cost2
1   100
2   100
2   100

表3:

id  cost3
1   100
2   100
1   100

out应该看起来像每个表格中列的总和:

Outout:

id  cost1 cost2 cost3
1   200   100   200
2   200   200   100

有人可以建议我这方面的最佳解决方案。

3 个答案:

答案 0 :(得分:3)

你的问题不是很明确,但我认为你正在寻找这些方面的东西。

{{1}}

答案 1 :(得分:1)

UNION ALL后跟PIVOT将比每个表格JOIN更有效地解决此问题。

<强> SQL Fiddle Demo

WITH t1(id,costnum,cost) AS (
  SELECT id,'cost1',cost1 FROM Table1 UNION ALL
  SELECT id,'cost2',cost2 FROM Table2 UNION ALL
  SELECT id,'cost3',cost3 FROM Table3
)
SELECT *
FROM t1
PIVOT(SUM(cost) FOR costnum IN ([cost1],[cost2],[cost3])) t2

答案 2 :(得分:0)

我们可以使用UNION ALL和派生表

实现相同目的
 select DISTINCT A.Id,
    SUM(A.cost1),
    SUM(A.cost2),
    SUM(A.cost3) from (
    select id,SUM(cost1)cost1,'' As Cost2,'' As cost3 from table1 
    GROUP BY  t.id
    UNION ALL
    select id,'' As Cost1,SUM(cost2)cost2,'' As cost3 from table2 
    GROUP BY  id
    UNION ALL
    select id,'' As Cost1,'' As cost2,SUM(t.cost3)cost3 from table3  
    GROUP BY  id )A
    GROUP BY A.Id