2017-07-14 71 views
0

这可能很简单,但我无法弄清楚我该怎么做。UNION ALL把戏ORACLE

所以我的代码是这样的

例如

SELECT id,total,total2 
FROM (select id, 0 AS total ,t1.total AS total2 
     FROM table1 t1 
     union ALL 
     select id, t2.total AS total, 0 AS total2 
     FRoM table2 t2) 

它显示

id------total------totals 
001  0   20 
001  15   0 

我想表明这样

id------total------totals 
001  15   20 

我该怎么办那?

谢谢你这么多

+0

大概你可以解释一下请求的上下文。您所希望的结果也可能来自表格之间的简单连接(请参见[sqlfiddle](http://sqlfiddle.com/#!4/8b863/4)) – Insac

回答

4

做一个汇总算账:

SELECT id, sum(total) as total, sum(total2) as total2 
FROM (select id, 0 AS total ,t1.total AS total2 
     FROM table1 t1 
     union ALL 
     select id, t2.total AS total, 0 AS total2 
     FRoM table2 t2 
    ) i 
GROUP BY id; 
1

相反倾销0年代进入一些列作为填料,可以使用WITH和子查询的到的所有记录检索总和匹配Id的不同列表中的Id。

;WITH GetIds AS (
SELECT DISTINCT id 
FROM table1 
UNION 
SELECT DISTINCT id 
FROM table2 
) 
SELECT id, 
(SELECT SUM(total) FROM table1 t1 WHERE t1.id = ids.id) AS total1, 
(SELECT SUM(total) FROM table2 t2 WHERE t2.id = ids.id) AS total2 
FROM GetIds ids