2017-11-01 2 views
0

나는이 테이블이 있습니다2 열에 피벗을 사용하는 방법은 무엇입니까?

MoveDate  Typ  Amount Capacity 
    2017-01-01  A  1000  10 
    2017-01-01  B  2000  20 
    2017-03-05  A  3000  5 
    2017-06-08  C  1500  6 

를하고이 결과 원하는 :

MoveDate  A  Capacity B  Capacity C Capacity 
2017-01-01 1000  10  2000  20  NULL NULL 
2017-03-05 3000  5   NULL  NULL NULL NULL 
2017-06-08 NULL  NULL  NULL  NULL 1500  6 

가 어떻게 피벗 또는 다른 방식으로 구현 할 수 있습니다?

+1

가능한 복제 [TSQL PIVOT MULTIPLE COLUMNS (https://stackoverflow.com/questions/19590799/tsql-pivot-multiple-columns) – GurV

답변

1

동적 SQL 쿼리를 사용하여이를 수행 할 수도 있습니다.

쿼리

declare @sql as varchar(max); 
select @sql = stuff((
     select ',sum(case [Typ] when ' + char(39) + [Typ] + char(39) 
       + ' then [Amount] end) as [' + [Typ] + '], 
       sum(case [Typ] when ' + char(39) + [Typ] + char(39) 
       + ' then [Capacity] end) as [Capacity] ' 
     from [your_table_name] 
     for xml path('') 
    ) 
    , 1, 1, '' 
); 

select @sql = 'select [MoveDate], ' + @sql 
       + ' from [your_table_name] group by [MoveDate];'; 

exec(@sql); 
0

다음과 같이 시도해보십시오.

SELECT 
    MoveDate, 
    SUM(CASE WHEN Typ = 'A' THEN Amount END) AS A, 
    SUM(CASE WHEN Typ = 'A' THEN Capacity END) AS Capacity, 
    SUM(CASE WHEN Typ = 'B' THEN Amount END) AS B, 
    SUM(CASE WHEN Typ = 'B' THEN Capacity END) AS Capacity, 
    SUM(CASE WHEN Typ = 'C' THEN Amount END) AS C, 
    SUM(CASE WHEN Typ = 'C' THEN Capacity END) AS Capacity 
FROM myTable 
GROUP BY MoveDate 
관련 문제