Как объединить 12 таблиц с разными и одинаковыми полями - PullRequest
0 голосов
/ 01 июня 2010

Привет, друзья! У меня проблемы с присоединением к таблицам в Oracle. Мои таблицы показаны ниже

table1 выглядит как

 id    Name    Jan
 7001  Deven   22 
 7002  Clause  55 
 7004  Monish  11 
 7010  Dipesh  55
 7070  Dipika  100

table2 выглядит как

  id      Name       Feb  
  7001    Deven      12 
  7002    Clause     15 
  7003    Nimesh     20 
  7004    Monish     21 
  7005    Ritesh     22 

таблица 3 выглядит как

  id      Name       Mar  
  7001    Deven      122 
  7020    Chalse     155 
  7003    Nimesh     88 
  7033    Monica     217 
  7070    Dipika     180

вот так у меня 12 таблиц с января по декабрь. Как можно объединить это и выложить как показано ниже:

  id      Name      Jan   Feb  Mar ...................... Dec
  7001    Deven     22    12   122
  7002    Clause    55    15   -   .......................-
  7003    Nimesh    -     20   88  .......................2
  7004    Monish    11    21   -   .......................-
  7005    Ritesh    -     22   -   .......................20
  7010    Dipesh    55    -    -   .......................-
  7020    Chalse    -     -    155 .......................-
  7033    Monica    -     -    217 .......................100
  7070    Dipika    100   -    -   .......................-

Ответы [ 3 ]

2 голосов
/ 01 июня 2010

Я бы пошел на GROUP BY без объединения (вероятно, наиболее эффективно, так как в каждой таблице один проход - предложение GROUP BY будет дуплицировать):

select id, name, max(jan) jan, max(feb) feb, /*...*/ max(dec) dec
  from (select id, name, jan jan, null feb, /*...*/ null dec
           from table1
         union all
         select id, name, null jan, feb feb, /*...*/ null dec
           from table2
         union all
         /*...*/
         select id, name, null jan, null feb, /*...*/ dec dec 
           from table12)
 group by id, name
0 голосов
/ 01 июня 2010

Вы могли бы рассмотреть возможность создания всех этих таблиц со столбцами: «идентификатор, имя, месяц, количество» (а затем даже год, если вы собираетесь охватить годы).

0 голосов
/ 01 июня 2010

Мой подход ниже - создать производную таблицу, которая содержит все идентификаторы и имена, а затем использовать ее для объединения с каждой из ваших таблиц. В отличие от UNION ALL, UNION удаляет нам дубликаты:

select a.id, a.name, t1.Jan, t2.Feb, t3.Mar
from (
    select id, name from table1 
    union
    select id, name from table2
    union
    select id, name from table3 
) a
left outer join table1 t1 on a.id = t1.id
left outer join table2 t2 on a.id = t2.id
left outer join table3 t3 on a.id = t3.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...