テーブル構造と最終結果がないため、探しているものを正確に知ることは困難です。データが必要なようですPIVOT
。PIVOT
動的バージョンの静的バージョンのいずれかを使用できます。
データ サンプルを含むテーブルを作成します。
create table tableA
(
id int,
id1 int,
days int
);
insert into tableA values
(96972, 1, 2976),
(96972, 174, 2976),
(96972, 173, 2966),
(96972, 175, 2966),
(96972, 176, 2963),
(96972, 177, 2961),
(96972, 178, 2960),
(96972, 179, 2952),
(96972, 180, 2945),
(96972, 181, 135);
静的バージョンには、ピボットするようにハードコーディングされた値があります。
select *
from
(
select id,
'Timeline_' + cast(ROW_NUMBER() over(PARTITION by id order by days desc) as varchar(10)) col,
id1 + days value
from tableA
) x
pivot
(
max(value)
for col in ([Timeline_1], [Timeline_2], [Timeline_3], [Timeline_4],
[Timeline_5], [Timeline_6], [Timeline_7], [Timeline_8],
[Timeline_9], [Timeline_10])
) p
動的バージョン、列は実行時に生成されます。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME( 'Timeline_' + cast(x.rn as varchar(10)))
from tableA
cross apply
(
select ROW_NUMBER() over(PARTITION by id order by days desc) rn
from tableA
) x
group by x.rn
order by x.rn
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT id, ' + @cols + ' from
(
select id,
''Timeline_'' + cast(ROW_NUMBER() over(PARTITION by id order by days desc) as varchar(10)) col,
id1 + days value
from tableA
) x
pivot
(
max(value)
for col in (' + @cols + ')
) p '
execute(@query)