2015-03-31 5 views
0

У меня есть набор данных ниже в Microsoft SQL Server (table A), и я пытаюсь установить на оба столбца ID_1 и ID_2. Я могу поворачиваться на одном столбце, но у меня трудности с поворотом на конкатенированной колонке. Любая помощь будет оценена по достоинству.SQL Несколько 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 поворота (макс (a.value) для a.ID_1 в ([1])), как фотоэлектрические где дата между '1/1/2014' и '1/3/2014' – bsheehy

+0

Я просто не могу понять, как поворачиваться на нескольких уровнях – bsheehy

ответ

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 |