2017-10-18 128 views
-1

我有透视表查询和我得到这些结果:透视对于透视表

货号| Shift |周一|星期二|星期三|
商品A | 1 | 10 | 20 | 30
商品A | 2 | 40 | 50 | 60
商品A | 3 | 70 | 80 | 90
商品B | 1 | 100 | 110 | 120
商品B | 2 | 130 | 140 | 150
ItemB | 3 | 160 | 170 | 180

,然后我想在像 'Day.Shift'

预计增加全天的移位字段:

Mon.1 | Mon.2 |星期一| Tue.1 |星期二|星期二| Wed.1 |周二|周三|
10 | 40 | 70 | 20 | 50 | 80 | 30 | 60 | 90 |
100 | 130 | 160 | 110 | 140 | 170 | 120 | 150 | 180 |

图片:
enter image description here

谢谢。

+0

阅读:http://modern-sql.com/use-case/pivot –

+0

@Jackques:在你的答案,如果你有Mon.1 | Mon.2 |星期一| Tue.1 |星期二| Tue.3等这是为ItemA或ItemA或两者? – JonWay

+0

@JonWay:这两个项目乔恩。 – Jackques

回答

2

你应该做UNPIVOT,然后做PIVOT

DECLARE @Test TABLE 
(
    ItemNo VARCHAR(32), 
    [Shift] INT, 
    Mon  INT, 
    Tue  INT, 
    Wed  INT 
) 

INSERT @Test 
VALUES 
('ItemA', 1, 10, 20, 30), 
('ItemA', 2, 40, 50, 60), 
('ItemA', 3, 70, 80, 90), 
('ItemB', 1, 100, 110, 120), 
('ItemB', 2, 130, 140, 150), 
('ItemB', 3, 160, 170, 180) 

SELECT ItemNo, [Mon.1],[Mon.2],[Mon.3],[Tue.1],[Tue.2],[Tue.3],[Wed.1],[Wed.2],[Wed.3] 
FROM (
    SELECT ItemNo, Item + '.' + CAST([Shift] AS VARCHAR) AS Item, DayShift 
    FROM (
     SELECT ItemNo, [Shift], Mon, Tue, Wed 
     FROM @Test 
    ) p 
    UNPIVOT (
    DayShift FOR Item IN (Mon, Tue, Wed) 
    ) u 
) s 
PIVOT (
MAX(DayShift) 
FOR Item IN ([Mon.1],[Mon.2],[Mon.3],[Tue.1],[Tue.2],[Tue.3],[Wed.1],[Wed.2],[Wed.3]) 
) p