Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann ich Pivot verwenden?

Ich habe Ihren technischen Beitrag hier überprüft und ich habe festgestellt, dass Sie PIVOT nicht verwenden möchten, da es nur aggregierte Ergebnisse zurückgibt. UNPIVOT bringt Sie sehr nah an das, wonach Sie suchen, und führt dann einfach eine Verknüpfung für die Tabelle für jede Spalte durch. Ich habe ein Beispiel mit den Daten gemacht, die Sie unten angegeben haben:

----Create the table and insert values as portrayed in the previous example.
CREATE TABLE pvt (EmpId int, Day1 char(1), Day2 char(1), Day3 char(1));
CREATE TABLE pvt2 (EmpId int, DayNum CHAR(4), DayNums CHAR(4));
GO
INSERT INTO pvt VALUES (1,'A','P','P');
INSERT INTO pvt VALUES (2,'P','P','P');
GO
--Unpivot the table.
INSERT INTO pvt2
SELECT EmpId,DayNum, DayNums
FROM 
   (SELECT EmpId, Day1, Day2, Day3
   FROM pvt) p
UNPIVOT
   (DayNums FOR DayNum IN 
      (Day1,Day2,Day3)
)AS unpvt;
GO
SELECT
 a.DayNum,
 a.DayNums,
    b.DayNums
FROM pvt2 a
 JOIN pvt2 b ON a.DayNum = b.DayNum
  AND a.EmpId=1
  AND b.EmpId = 2

Wenn Sie den obigen Code ausführen, wird Folgendes zurückgegeben:

Exp   1  2  3 as EmpId
----------
Day1  A  P  ....
Day2  P  P  ...
Day3  P  P  ...

Die einzige andere Lösung, die ich kenne, ist dynamisches SQL, und das ist langsamer und hat seine Gefahren. Wenn Sie den Code jedoch einmal ausführen, könnte das auch funktionieren.