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

Откуда:
Сообщений: 8
T-sql

Код:
Create table #t (Name Varchar(20), Num int)
Insert into #t Values ('Вася',5)
Insert into #t Values ('Вася',6)
Insert into #t Values ('Вася',7)
Insert into #t Values ('Вася',8)
Insert into #t Values ('Петя',1)
Insert into #t Values ('Маня',2)
Insert into #t Values ('Коля',3)
Insert into #t Values ('Коля',4)

Select P.Num as Петя, K.Num as Коля, M.Num as Маня, v.Num as Вася
From #t P
	left join #t K on K.Name = 'Коля'
	left join #t M on M.Name = 'Маня'
	left join #t V on V.Name = 'Вася'
where P.Name = 'Петя'

Drop table #t


Возвращает:

Петя Коля Маня Вася
1 3 2 5
1 3 2 6
1 3 2 7
1 3 2 8
1 4 2 5
1 4 2 6
1 4 2 7
1 4 2 8


Надо как-то из исходной таблицы получить:

Петя Коля Маня Вася
1 3 2 5
0 4 0 6
0 0 0 7
0 0 0 8

(Вместо 0 можно NULL)

Т.е. если в "подзапросе" строк меньше, чем в максимально, то его значения не повторять.
Это возможно?
13 сен 17, 17:40    [20793531]     Ответить | Цитировать Сообщить модератору
 Re: Неполное соединение  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
4E.6yPAIIIKA, сделайте таблицу от 1 до максимального количества строк для одного Name, пронумеруйте все значения для каждого name, соедините эту таблицу с числами по совпадению порядкового номера значения с числом в таблице.
13 сен 17, 17:48    [20793565]     Ответить | Цитировать Сообщить модератору
 Re: Неполное соединение  [new]
dies irae
Member

Откуда:
Сообщений: 78
declare @t table(Name Varchar(20), Num int)
Insert into @t Values ('Вася',5)
Insert into @t Values ('Вася',6)
Insert into @t Values ('Вася',7)
Insert into @t Values ('Вася',8)
Insert into @t Values ('Петя',1)
Insert into @t Values ('Маня',2)
Insert into @t Values ('Коля',3)
Insert into @t Values ('Коля',4)

;with t_with_row_no as (
	select *
		, row_number() over(partition by Name order by Num) as row_no
	from @t
)
select Петя, Коля, Маня, Вася
from t_with_row_no 
	pivot (max(Num) for Name in (Петя, Коля, Маня, Вася)) as p
13 сен 17, 18:16    [20793641]     Ответить | Цитировать Сообщить модератору
 Re: Неполное соединение  [new]
4E.6yPAIIIKA
Member

Откуда:
Сообщений: 8
Спасибо.
14 сен 17, 09:22    [20794558]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить