2016-08-17 4 views
-1

это мой первый вопрос здесь. У меня есть 4 разных таблицы. Я хочу консолидировать данные, как показано на рисунке, используя SQL-запрос, желательно присоединяется. Мне интересно, может ли кто-нибудь помочь мне с этим !SQL Query for Data Consolidation

Таблица данных:

enter image description here

+0

Привет, Mourya, - добро пожаловать в SO. Прежде чем зайти слишком далеко, прочитайте эту заметку (из справочного центра) о том, как задавать вопросы: http://stackoverflow.com/help/how-to-ask И это тоже: http://stackoverflow.com/help/mcve Затем, пожалуйста, отредактируйте свое сообщение, чтобы выбрать соответствующие теги (это MySQL? Это Oracle?) Удачи! – mathguy

ответ

0

Вот один из способов сделать это (используя спецификатор предоставлять данные выборки):

with table_a (col1, col2) 
as 
(select 'X', 10 from dual 
    union all 
select 'Y', 30 from dual 
    union all 
select 'Z', 50 from dual 
) 
, table_b (col1, col2) 
as 
(select 'M', 10 from dual 
    union all 
select 'X', 20 from dual 
    union all 
select 'Y', 30 from dual 
) 
, table_c (col1, col2) 
as 
(select 'N', 10 from dual 
    union all 
select 'Y', 50 from dual 
    union all 
select 'Z', 70 from dual 
) 
, table_d (col1, col2) 
as 
(select 'M', 10 from dual 
    union all 
select 'N', 50 from dual 
    union all 
select 'Z', 70 from dual 
), 
distinct_col1 
as 
(
SELECT col1 
    FROM table_a 
UNION 
SELECT col1 
    FROM table_b 
UNION 
SELECT col1 
    FROM table_c 
UNION 
SELECT col1 
    FROM table_d 
) 
SELECT d1.col1 
    , t_a.col2 as a_col2 
    , t_b.col2 as b_col2 
    , t_c.col2 as c_col2 
    , t_d.col2 as d_col2 
    FROM distinct_col1 d1 
     LEFT OUTER JOIN 
     table_a t_a 
      ON d1.col1 = t_a.col1 
     LEFT OUTER JOIN 
     table_b t_b 
      ON d1.col1 = t_b.col1 
     LEFT OUTER JOIN 
     table_c t_c 
      ON d1.col1 = t_c.col1 
     LEFT OUTER JOIN 
     table_d t_d 
      ON d1.col1 = t_d.col1 
ORDER BY d1.col1 

С физической таблицей TABLE_A, TABLE_B, table_c, и table_d это просто:

with distinct_col1 
as 
(
SELECT col1 
    FROM table_a 
UNION 
SELECT col1 
    FROM table_b 
UNION 
SELECT col1 
    FROM table_c 
UNION 
SELECT col1 
    FROM table_d 
) 
SELECT d1.col1 
    , t_a.col2 as a_col2 
    , t_b.col2 as b_col2 
    , t_c.col2 as c_col2 
    , t_d.col2 as d_col2 
    FROM distinct_col1 d1 
     LEFT OUTER JOIN 
     table_a t_a 
      ON d1.col1 = t_a.col1 
     LEFT OUTER JOIN 
     table_b t_b 
      ON d1.col1 = t_b.col1 
     LEFT OUTER JOIN 
     table_c t_c 
      ON d1.col1 = t_c.col1 
     LEFT OUTER JOIN 
     table_d t_d 
      ON d1.col1 = t_d.col1 
ORDER BY d1.col1