SQL Multiple Pivot

时间:2015-03-31 17:21:46

标签: sql sql-server pivot

我在Microsoft SQL Server(table A)中有以下数据集,并尝试在ID_1ID_2列上进行转移。我可以在一列上转动,但在连接列上很难转动。任何帮助都将非常感激。

我有什么(table A):

Date     ID_1   ID_2    Value
1-Jan      1     a       77
1-Jan      1     b       113
1-Jan      1     c       212
2-Jan      1     a       159
2-Jan      1     b       85
2-Jan      1     c       46
3-Jan      1     a       300
3-Jan      1     b       456
3-Jan      1     c       100

我需要什么(table B):

Date    1_a 1_b 1_c
1-Jan   77  113 212
2-Jan   159 85  46
3-Jan   300 456 100

1 个答案:

答案 0 :(得分:2)

SQL Fiddle

查询1

DECLARE @Table TABLE ([Date] VARCHAR(10),ID_1 INT, ID_2 CHAR(1), Value INT)
INSERT INTO @Table VALUES 
('1-Jan',      1     ,'a',       77  ),
('1-Jan',      1     ,'b',       113),
('1-Jan',      1     ,'c',       212),
('2-Jan',      1     ,'a',       159),
('2-Jan',      1     ,'b',       85),
('2-Jan',      1     ,'c',       46),
('3-Jan',      1     ,'a',       300),
('3-Jan',      1     ,'b',       456),
('3-Jan',      1     ,'c',       100)


SELECT *
FROM (
SELECT [Date] 
     , CAST(ID_1 AS VARCHAR(10)) + '_' + ID_2  AS Cols
     , Value
FROM @Table)t
 PIVOT (SUM(Value)
        FOR Cols 
        IN([1_a],[1_b],[1_c])
        )p

Results

|  Date | 1_a | 1_b | 1_c |
|-------|-----|-----|-----|
| 1-Jan |  77 | 113 | 212 |
| 2-Jan | 159 |  85 |  46 |
| 3-Jan | 300 | 456 | 100 |