sequence
숫자를 열 이름의 일부로 포함 시키려면 col1
및 col2
열을 먼저 unpivot 한 다음 피벗을 적용해야합니다. 차이점은 sequence
숫자를 unpivot 프로세스 중에 작성된 열 이름에 연결한다는 것입니다. 알 수없는 번호가있는 경우
가
select REFID,
[1col1], [2col1], [3col1],
[1col2], [2col2], [3col2]
from
(
select REFID,
col = cast(Sequence as varchar(10))+ col, value
from yourtable
cross apply
(
select 'COL1', col1 union all
select 'COL2', col2
) c (col, value)
) d
pivot
(
max(value)
for col in ([1col1], [2col1], [3col1],
[1col2], [2col2], [3col2])
) piv
order by refid;
그런 다음 동적 SQL 버전이 될 것입니다 :
이
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(cast(Sequence as varchar(10))+ col)
from yourtable
cross apply
(
select 'Col1', 1 union all
select 'Col2', 2
) c(col, so)
group by Sequence, col, so
order by so, sequence
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT refid, ' + @cols + '
from
(
select REFID,
col = cast(Sequence as varchar(10))+ col, value
from yourtable
cross apply
(
select ''COL1'', col1 union all
select ''COL2'', col2
) c (col, value)
) x
pivot
(
max(value)
for col in (' + @cols + ')
) p
order by refid'
execute sp_executesql @query;
사용하는 SQLServer에 버전 쿼리가 될 값의 알려진 숫자에 대한
? –
sql server 2005 – puneet
[SQL Server 2005 Pivot on Unknown Number of Columns] 가능한 중복 (http://stackoverflow.com/questions/213702/sql-server-2005-pivot-on-unknown-number-of-columns) –