2017-10-18 3 views
-1

Ich habe eine Abfrage für Pivot-Tabelle und ich bekomme dieses Resultat:Pivot für Pivot-Tabelle

Art.Nr. | Umschalt | Mon Di | Mi |
ItemA | 1 | 10 | 20 | 30
ItemA | 2 | 40 | 50 | 60
ItemA | 3 | 70 | 80 | 90
ArtikelB | 1 | 100 | 110 | 120
ArtikelB | 2 | 130 | 140 | 150
ArtikelB | 3 | 160 | 170 | 180

und dann möchte ich Schaltfeld am Tag wie 'Day.Shift'

Erwartet hinzuzufügen:

Mon.1 | Mon.2 | Mon.3 | Tue.1 | Di.2 | Di.3 | Mi.1 | Mi.2 | Mi.3 |
10 | 40 | 70 | 20 | 50 | 80 | 30 | 60 | 90 |
100 | 130 | 160 | 110 | 140 | 170 | 120 | 150 | 180 |

Image:
enter image description here

Danke.

+0

dies lesen: http://modern-sql.com/use-case/pivot –

+0

@Jackques: In Ihrer Antwort, wenn Sie Mon.1 haben | Mon.2 | Mon.3 | Tue.1 | Di.2 | Tue.3 etc. Ist dies für ItemA oder ItemA oder beides? – JonWay

+0

@ JonWay: für beide Artikel Jon. – Jackques

Antwort

2

Sie sollten UNPIVOT tun und dann tun 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