2017-07-14 16 views
0

これは簡単かもしれませんが、私は自分のやり方を理解できません。UNION ALL Trick ORACLE

ので、私のコードは、それは私がこの

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

私はどのように行うことができますように表示したいと思い

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

を示し例

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) 

のためにこの

のようなものですそれ?

はそんなに

+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 
関連する問題