2016-10-05 5 views
0

に基づいて列にそれを表示:のMySQL:2テーブルを選択し、私はこのような私のテーブルルック持っ年

にtableA:

YEAR | GenerationA | TransmissionA 
-------------------------------- 
2015 | 213   | null 
2016 | 1122  | null 
2016 | null  | 5 
2017 | null  | 999 

TABLEB:

YEAR | GenerationB | TransmissionB 
-------------------------------- 
2014 | 111   | null 
2016 | 534   | null 
2016 | null  | 4 
2017 | null  | 5 
2017 | 555   | null 

を表Aと表Bの両方で、データは生成列または送信列のいずれかに表示されますが、両方の列になることはできません。

たとえば、TableAの、2016年には、第一のデータは534の列の生成に表示され、2016年第2回データが値4 の列の伝送に表示されます、それの一部は、発電や送電

結果で一度表示されます

それは以下のような結果になるように私は、年に基づいて、この2テーブルに参加したいと思います:

YEAR | GenerationA | TransmissionA | GenerationB | TransmissionB 
---------------------------------------------------------------------------------------- 
2014 | null  | null   | 111   | null 
2015 | 213   | null   | null  | null 
2016 | 1122  | 5    | 534   | 4 
2017 | null  | 999   | 555   | 5 

のSchをEMA:

CREATE TABLE tableA 
(
Year int(11), 
GenerationA int(20), 
TransmissionA int(20) 
); 

CREATE TABLE tableB 
(
Year int(11), 
GenerationB int(20), 
TransmissionB int(20) 
); 

INSERT INTO tableA VALUES (2015,213,null); 
INSERT INTO tableA VALUES (2016,1122,null); 
INSERT INTO tableA VALUES (2016,null,5); 
INSERT INTO tableA VALUES (2017,null,999); 

INSERT INTO tableB VALUES (2014,111,null); 
INSERT INTO tableB VALUES (2016,534,null); 
INSERT INTO tableB VALUES (2016,null,4); 
INSERT INTO tableB VALUES (2017,null,5); 
INSERT INTO tableB VALUES (2017,555,null); 

SQLアプローチ:

SELECT * FROM tableA 
LEFT JOIN tableB ON tableA.YEAR = tableB.YEAR 
GROUP BY tableA.YEAR 
UNION 
SELECT * FROM tableA 
RIGHT JOIN tableB ON tableA.YEAR = tableB.YEAR 
GROUP BY tableB.YEAR 

は、SQLの上にしようとしたが、

iはsqlfiddleでそれを作成しようとしました、それはそうここにある、私にエラーを与え続けます結果を得ることができません。どんな助けもありがとう。あなたがunion allgroup byでこれを行うことができます

答えて

2

select year, 
     max(GenerationA) as GenerationA, 
     max(TransmissionA) as TransmissionA, 
     max(GenerationB) as GenerationB, 
     max(TransmissionB) as TransmissionB 
from ((select year, GenerationA, TransmissionA, 
       NULL as GenerationB, NULL as TransmissionB 
     from tableA 
    ) union all 
     (select year, NULL as GenerationA, NULL as TransmissionA, 
       GenerationB, TransmissionB 
     from tableB 
    ) 
    ) ab 
group by year; 
+0

はそのことを考えることはありません、どうもありがとうございました...脳が立ち往生:) – Teddybugs

関連する問題