Я использую MS SQL Server 2005.
Я думаю, что PIVOT мог бы помочь мне здесь, но я не могу понять это. Я, должно быть, слишком много думаю.
Вот вход
create table #myrows (id char(1), seq_i int, val char(10))
insert into #myrows values('A',1, 'A1')
insert into #myrows values('A',2, 'A2')
insert into #myrows values('A',3, 'A3')
insert into #myrows values('A',4, 'A4')
insert into #myrows values('A',5, 'A5')
insert into #myrows values('A',6, 'A6')
insert into #myrows values('A',7, 'A7')
insert into #myrows values('A',8, 'A8')
insert into #myrows values('A',9, 'A9')
insert into #myrows values('A',10, 'A10')
insert into #myrows values('B',1, 'B1')
insert into #myrows values('B',2, 'B2')
insert into #myrows values('B',3, 'B3')
insert into #myrows values('B',4, 'B4')
insert into #myrows values('B',5, 'B5')
insert into #myrows values('B',6, 'B6')
insert into #myrows values('C',1, 'C1')
insert into #myrows values('C',2, 'C2')
insert into #myrows values('C',3, 'C3')
Я могу сделать это с T-SQL, когда передаю идентификатор. Но мне кажется, что есть простое представление sql, которое я мог бы создать, не требующее от меня отправки идентификатора. Вот T-SQL, который дает мне вывод, который я хочу получить для одного идентификатора:
DECLARE @max_hierarchy int
DECLARE @code CHAR(1)
select @code = 'C'
SELECT @max_hierarchy = max(seq_i)
FROM #myrows
WHERE id=@code
SELECT top 1
(SELECT val from #myrows WHERE id=@code AND seq_i = @max_hierarchy) AS 'Level1',
(SELECT val from #myrows WHERE id=@code AND seq_i = @max_hierarchy-1) AS 'Level2',
(SELECT val from #myrows WHERE id=@code AND seq_i = @max_hierarchy-2) AS 'Level3',
(SELECT val from #myrows WHERE id=@code AND seq_i = @max_hierarchy-3) AS 'Level4',
(SELECT val from #myrows WHERE id=@code AND seq_i = @max_hierarchy-4) AS 'Level5'
from #myrows
WHERE id=@code
В идеале это будет мой вывод SQL, который я ищу:
Code Level1 Level2 Level3 Level4 Level5
---- ----------- ----------- ----------- ----------- -----------
A A10 A9 A8 A7 A6
B B6 B5 B4 B3 B2
C C3 C2 C1 NULL NULL