Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment puis-je utiliser pivot?

J'ai vérifié votre publication technique ici et j'ai découvert que vous ne vouliez pas utiliser PIVOT car il ne renvoie que des résultats agrégés. UNPIVOT vous rapprochera de ce que vous recherchez, puis effectuerez simplement une jointure sur la table pour chaque colonne. J'ai fait un exemple avec les données que vous avez données ci-dessous :

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

L'exécution du code ci-dessus renverra :

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

La seule autre solution que je connaisse est le SQL dynamique, qui est plus lent et présente des dangers. Cependant, si vous exécutez le code une fois, cela pourrait également fonctionner.