이 유형의 데이터 변환은 PIVOT
으로 알려져 있습니다. 일부 데이터베이스 제품에는 데이터를 행에서 열로 변환하는 기능이 있습니다. 당신이로 데이터를 변환 할 수 PIVOT
기능을 사용할 수 있습니다, 당신은 SQL Server 2008을 사용하고 있기 때문에
select client,
sum(case when year = 1999 then investment end) Year_1999,
sum(case when year = 2000 then investment end) Year_2000
from yourtable
group by client
이 SQL Fiddle with Demo
를 참조하십시오
당신은 어떤 데이터베이스에 CASE
표현으로 집계 함수를 사용할 수 있습니다 열 :
select *
from
(
select client,
'Year_'+cast(year as varchar(4)) year,
investment
from yourtable
) src
pivot
(
sum(investment)
for year in (Year_1999, Year_2000)
) piv
SQL Fiddle with Demo을 참조하십시오. 당신이 year
값의 알려진 번호가있는 경우
다른 쿼리는 잘 작동하지만, 당신이 알 수없는 번호가있는 경우에, 당신은 동적 SQL을 사용하는 것이 좋습니다 :
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME('Year_'+cast(year as varchar(4)))
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT client,' + @cols + ' from
(
select client,
''Year_''+cast(year as varchar(4)) year,
investment
from yourtable
) x
pivot
(
sum(investment)
for year in (' + @cols + ')
) p '
execute(@query)
이 SQL Fiddle with Demo를 참조하십시오.
이
은 테이블에 여러 번 참여하여 수행 할 수 있습니다 :
select t1.client,
t1.investment Year_1999,
t2.investment Year_2000
from yourtable t1
left join yourtable t2
on t1.client = t2.client
and t2.year = 2000
where t1.year = 1999
이 SQL Fiddle with Demo
모든 쿼리 결과를 제공 참조 :
| CLIENT | YEAR_1999 | YEAR_2000 |
----------------------------------
| X | 100 | 1000 |
| Y | 200 | 2000 |
일을 PIVOT''에 대한. – rbedger
감사합니다! 그 작품 : – JJunior
그걸 듣게되어 기쁘다 .. –