sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan kan jeg bruge pivot?

Jeg tjekkede dit tekniske opslag her og jeg fandt ud af, at du ikke ønsker at bruge PIVOT, fordi det kun returnerer samlede resultater. UNPIVOT vil få dig meget tæt på det, du leder efter, og derefter bare lave en join på bordet for hver kolonne. Jeg lavede et eksempel med de data, du gav nedenfor:

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

Hvis du kører ovenstående kode, returneres:

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

Den eneste anden løsning, jeg kender, er dynamisk SQL, og det er langsommere og har sine farer. Men hvis du kører koden én gang, kunne det også virke.




  1. javax.persistence.EntityExistsException med SequenceGenerator

  2. Hvad er brugen af ​​SQL GROUP BY-erklæring?

  3. Connection nægtede at MySQL på laravel og MAMP

  4. SubSonic 3 og MySQL, fjernelse af understregning fra kolonnenavn i CleanUp()-metoden forårsager undtagelser ved brug af egenskab i linq-query