Объединение результатов трех запросов в один набор данных cross Apply или join

Как я могу объединить результаты трех запросов в один набор данных? Перекрестная Подать заявку или присоединиться?

create table tbl_A
(
Dept varchar(5),
DocCountA int
);

create table tbl_b
(
Dept varchar(5),
DocCountB int
);

create table tbl_c
(
Dept varchar(5),
DocCountC int
);

insert into tbl_A
values ('XX',12),('YY',14),('ZZ',16)

insert into tbl_b
values ('XX',20),('YY',25),('ZZ',27)

insert into tbl_c
values ('XX',30),('YY',35)

select * from tbl_A  
select * from tbl_B  
select * from tbl_C  

**tbl_A**  
Dept    DocCountA  
XX  12  
YY  14  
ZZ  16  


**tbl_B**  
Dept    DocCountB  
XX  20   
YY  25    
ZZ  27  

**tbl_C**  
Dept    DocCountC  
XX  30    
YY  35  

Результат

Dept DocCountA DocCountB DocCountC  
XX  
YY  
ZZ    

В таблице C есть два результата. ZZ будет пустым.

это работает с использованием двух запросов трех будет отлично!

выберите * из tbl_A A
перекрестно применить
(
выберите B.DocCountB из tbl_b B
Где B.Dept = A.Dept
) sod


person winchmore    schedule 12.11.2014    source источник


Ответы (1)


Левое соединение на каждой таблице позволит вам получить все 3 отдела и счетчики, если они существуют.

select
  a.dept, DocCountA, DocCountB, DocCountC
from
  tbl_a a
  left join tbl_b b on a.dept = b.dept
  left join tbl_c c on a.dept = c.dept

Вот рабочая скрипка

person crthompson    schedule 12.11.2014
comment
Дополнительные варианты присоединения: если запись может не существовать в таблице A для отдела, сделайте full outer join. Если во всех трех таблицах гарантированно будет запись для каждого отдела, выполните inner join. Если это гарантировано в одной (или нескольких) таблицах, но не в других, from или inner join таблицы, которые будут иметь записи первыми, а затем left outer join те, которые могут не быть следующими. - person JohnLBevan; 13.11.2014
comment
огромное спасибо! три запроса будут построены с использованием производных запросов и сводной таблицы. Результаты будут такими же, как в приведенных выше таблицах ... - person winchmore; 13.11.2014
comment
@winchmore рад, что мы смогли помочь. Обязательно отметьте ответы и проголосуйте за них, когда сможете. Удачи! - person crthompson; 13.11.2014
comment
это работает с использованием двух запросов. Три будет отлично! выберите * из tbl_A A cross apply (выберите B.DocCountB из tbl_b B, где B.Dept = A.Dept) sod - person winchmore; 13.11.2014
comment
@winchmore, я не понимаю, вы говорите, что мое решение работает или нет? - person crthompson; 13.11.2014