2017-12-20 3 views
2

Ich habe derzeit Tabellen wie folgt aus:schwenken und Entpivotisierung SQL-Tabellen


Check 1: 
Name  |Q1|Q2|Q3|Q4 
----------- |--|--|--|-- 
McDonalds | P| P| F| P 
Burger King | F| P| P| F 

Check 2: 
Name  |Q1|Q2|Q3|Q4 
----------- |--|--|--|-- 
McDonalds | F| F| F| P 
Burger King | F| P| P| P 

Ich möchte Q1-Q4 UNPIVOT, so dass ich eine einzelne Spalte mit dem Namen ‚Quarter‘ bekommen. Ich möchte auch die beiden (oder mehr) Tabellen mit neuen Spalten im Zusammenhang mit der Prüfung kombinieren, zB:


Name  |Quarter|Check 1|Check 2 
------------|-------|-------|------- 
McDonalds |  Q1|  P|  F 
McDonalds |  Q2|  P|  F 
McDonalds |  Q3|  F|  F 
McDonalds |  Q4|  P|  P 
Burger King |  Q1|  F|  F 
Burger King |  Q2|  P|  P 
Burger King |  Q3|  P|  P 
Burger King |  Q4|  F|  P 

ich einen Weg, um die Tabellen auf den Viertelsäulen über den folgenden UNPIVOT gefunden:

SELECT Name, Quarter, PassFail 
FROM Check1 
unpivot 
(
    PassFail 
    for Quarter in (Q1, Q2, Q3, Q4) 
) u 

Aber ich war nicht in der Lage, die beiden Schritte zu kombinieren. Jede Hilfe wäre willkommen.

bearbeiten Ich bin mit Microsoft SQL Sever 2012

+0

Hallo @TimBiegeleisen. Ich benutze MS SQL Server 2012. – Alex

Antwort

1

Ein Ansatz ist Ihre UNPIVOT auf jedem Tisch und JOIN die Ergebnisse wiederholen:

SELECT T1.*, T2.Check2 
FROM (SELECT Name, Quarter, Check1 
     FROM CheckTable1 
     UNPIVOT 
     (
     Check1 
     for Quarter in (Q1, Q2, Q3, Q4) 
     ) u 
    ) T1 
JOIN (SELECT Name, Quarter, Check2 
     FROM CheckTable2 
     UNPIVOT 
     (
      Check2 
      for Quarter in (Q1, Q2, Q3, Q4) 
     ) u 
    ) T2 ON T1.NAME = T2.NAME 
      AND T1.QUARTER = T2.QUARTER 
+0

Das hat perfekt funktioniert. Vielen Dank! – Alex