Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с запросом. Хитрый join  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
Здравствуйте! Есть таблицы примерно такого содержания:

lev0rn
a1
a2
a3

lev1rn
d1
d2
d3
d4
d5

lev2rn
b1
b2
b3
b4

lev3rn
c1
c2


Нужно получить:
lev0lev1lev2lev3
adbc
adbc
adbNULL
NULLdbNULL
NULLdNULLNULL


Попытался так:
select 'a' [lev0], 1 [rn] into #t0 union all select 'a',2 union all select 'a',3
select 'd' [lev1], 1 [rn] into #t1 union all select 'd',2 union all select 'd',3 union all select 'd',4 union all select 'd',5
select 'b' [lev2], 1 [rn] into #t2 union all select 'b',2 union all select 'b',3 union all select 'b',4
select 'c' [lev3], 1 [rn] into #t3 union all select 'c',2

--select * from #t0 select * from #t1 select * from #t2 select * from #t3

select lev0, lev1, lev2, lev3
from #t0 t0
full join #t1 t1 on t0.rn = t1.rn
full join #t2 t2 on t0.rn = t2.rn
full join #t3 t3 on t0.rn = t3.rn


drop table #t0 drop table #t1 drop table #t2 drop table #t3


Но это не то, то нужно...
12 дек 11, 17:43    [11751574]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Хитрый join  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
Версия

Microsoft SQL Server 2005 - 9.00.5259.00 (X64) 
	Jan 31 2011 15:31:49 
	Copyright (c) 1988-2005 Microsoft Corporation
	Standard Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)
12 дек 11, 17:44    [11751584]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Хитрый join  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
select lev0, lev1, lev2, lev3
from #t0 t0
full join #t1 t1 on t0.rn = t1.rn
full join #t2 t2 on t0.rn = t2.rn or t1.rn = t2.rn
full join #t3 t3 on t0.rn = t3.rn or t1.rn = t3.rn or t2.rn = t3.rn
12 дек 11, 17:52    [11751677]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Хитрый join  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
Паганель, спасибо.

А я пытался сделать со скобками примерно как здесь, но ничего не вышло :(
12 дек 11, 17:56    [11751712]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Хитрый join  [new]
Geep
Member

Откуда: Москва
Сообщений: 975
select lev0,lev1,lev2,lev3
from (select rn from #t0 
union select rn from #t1
union select rn from #t2
union select rn from #t3) x
left join #t0 on x.rn = #t0.rn
left join #t1 on x.rn = #t1.rn
left join #t2 on x.rn = #t2.rn
left join #t3 on x.rn = #t3.rn
12 дек 11, 17:57    [11751719]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Хитрый join  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
Geep, тоже ОК.
12 дек 11, 17:58    [11751738]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Хитрый join  [new]
qwrqwr
Member

Откуда: Msk
Сообщений: 1684
тут джойн и не нужен даже.
select l0,l1,l2,l3 from
(
select 'l0'n,* from #t0 union all
select 'l1'n,* from #t1 union all
select 'l2'n,* from #t2 union all
select 'l3'n,* from #t3)P pivot (max(lev0) for n in(l0,l1,l2,l3))PP
12 дек 11, 23:50    [11753646]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Хитрый join  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
qwrqwr, хороший вариант.
13 дек 11, 10:19    [11754508]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить