최종 결과를 얻으려면 PIVOT 기능을 사용할 수 있지만 먼저 col1
및 col2
열을 피벗 해제하면 여러 열을 피벗하지 않습니다. 당신이 열 제한된 수의 경우
는, 당신은 하드 코딩 할 수 쿼리 :
select REFID, col, [1], [2], [3]
from
(
select REFID, Sequence, col, value
from yourtable
cross apply
(
select 'COL1', col1 union all
select 'COL2', col2
) c (col, value)
) d
pivot
(
max(value)
for sequence in ([1], [2], [3])
) piv
order by refid;
그러나 당신은 sequence
값을 알 수없는 번호가, 당신은 동적 SQL 사용할 수 있습니다
을
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(sequence)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT refid, col,' + @cols + '
from
(
select REFID, Sequence, col, value
from yourtable
cross apply
(
select ''COL1'', col1 union all
select ''COL2'', col2
) c (col, value)
) x
pivot
(
max(value)
for Sequence in (' + @cols + ')
) p
order by refid'
execute sp_executesql @query;
어떤 데이터베이스입니까? 그리고 그것을 시도한 것은 무엇입니까? –
나는 아직도 초보자이다. 나는 피벗 문법을 찾았지만, 열이 여러개의 refID에 대해 반복적으로 행해졌다는 것을 전혀 발견하지 못했다. – puneet
SQL 서버 2005에있다. – puneet