sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik pivot gebruiken?

Ik heb je technische posting hier gecontroleerd en ik ontdekte dat je PIVOT niet wilt gebruiken omdat het alleen geaggregeerde resultaten retourneert. UNPIVOT brengt je heel dicht bij wat je zoekt en doet dan gewoon een join op de tafel voor elke kolom. Ik heb een voorbeeld gemaakt met de gegevens die je hieronder hebt gegeven:

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

Het uitvoeren van de bovenstaande code zal terugkeren:

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

De enige andere oplossing die ik ken is dynamische SQL en dat is langzamer en heeft zijn gevaren. Als u de code echter één keer uitvoert, kan dat ook werken.




  1. Inner join tussen drie tabellen in mysql

  2. TypeError:create() heeft meerdere waarden voor trefwoordargument 'context'

  3. Ondersteunt Oracle zoeken in volledige tekst?

  4. Query met gebroken subselectie zou een fout moeten opleveren, maar retourneert rijen