我有三个表,每个表具有共同的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
有人可以建议我这方面的最佳解决方案。
答案 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