여러 행에서 열로 데이터를 변환 할 수있는 몇 가지 방법이 있습니다.
사용 PIVOT
SQL Server PIVOT
에서이 함수를 사용 하여 데이터를 행에서 열로 변환 할 수 있습니다 .
select Firstname, Amount, PostalCode, LastName, AccountNumber
from
(
select value, columnname
from yourtable
) d
pivot
(
max(value)
for columnname in (Firstname, Amount, PostalCode, LastName, AccountNumber)
) piv;
데모를 참조하십시오 .
수를 알 수없는 피벗 columnnames
바꾸려는 수의 알 수없는 수가 columnnames
있는 경우 동적 SQL을 사용할 수 있습니다.
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(ColumnName)
from yourtable
group by ColumnName, id
order by id
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = N'SELECT ' + @cols + N' from
(
select value, ColumnName
from yourtable
) x
pivot
(
max(value)
for ColumnName in (' + @cols + N')
) p '
exec sp_executesql @query;
데모를 참조하십시오 .
집계 함수 사용
PIVOT
함수 를 사용하지 않으려면 CASE
식과 함께 집계 함수를 사용할 수 있습니다 .
select
max(case when columnname = 'FirstName' then value end) Firstname,
max(case when columnname = 'Amount' then value end) Amount,
max(case when columnname = 'PostalCode' then value end) PostalCode,
max(case when columnname = 'LastName' then value end) LastName,
max(case when columnname = 'AccountNumber' then value end) AccountNumber
from yourtable
데모를 참조하십시오 .
여러 조인 사용
여러 조인을 사용하여이 작업을 완료 할 수도 있지만 샘플 데이터에없는 각 행을 연결하려면 일부 열이 필요합니다. 그러나 기본 구문은 다음과 같습니다.
select fn.value as FirstName,
a.value as Amount,
pc.value as PostalCode,
ln.value as LastName,
an.value as AccountNumber
from yourtable fn
left join yourtable a
on fn.somecol = a.somecol
and a.columnname = 'Amount'
left join yourtable pc
on fn.somecol = pc.somecol
and pc.columnname = 'PostalCode'
left join yourtable ln
on fn.somecol = ln.somecol
and ln.columnname = 'LastName'
left join yourtable an
on fn.somecol = an.somecol
and an.columnname = 'AccountNumber'
where fn.columnname = 'Firstname'
cross join
대신 사용할 수 있습니다left join
.