sql >> Databasteknik >  >> RDS >> Sqlserver

Hur kan jag använda pivot?

Jag kollade ditt tekniska inlägg här och jag upptäckte att du inte vill använda PIVOT eftersom det bara ger samlade resultat. UNPIVOT kommer att få dig väldigt nära det du letar efter och sedan gör du bara en join på bordet för varje kolumn. Jag gjorde ett exempel med uppgifterna du gav nedan:

----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

Att köra ovanstående kod kommer att returnera:

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

Den enda andra lösningen jag känner till är dynamisk SQL och som är långsammare och har sina faror. Men om du kör koden en gång kan det också fungera.




  1. Inkludera, välj, sortera, begränsa från flera modeller (en fråga)

  2. Var kan jag få SQL för standard Oracles HR-schema?

  3. Varför bara väntastatistik inte räcker

  4. Beräkna avstånd mellan 400 städer och optimera MySQL för det?