2015-03-31 74 views
0

我在Microsoft SQL Server(table A)中设置了以下数据集,并试图在列ID_1ID_2上进行透视。我可以在一列上旋转,但在连续列上旋转很困难。任何帮助将不胜感激。SQL Multiple Pivot

我有什么(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 
+0

选择 日期, [1] 从TBLA一个 枢轴(MAX(a.value中),用于在a.ID_1([1]))作为PV 其中日期在'1/1/2014'和'1/3/2014'之间 – bsheehy 2015-03-31 17:31:04

+0

我似乎无法弄清楚如何在多个层面上进行转换 – bsheehy 2015-03-31 17:32:12

回答

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 |