2017-10-18 141 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