sql >> Databáze >  >> RDS >> Sqlserver

Jak mohu použít pivot?

Zkontroloval jsem váš technický příspěvek zde a zjistil jsem, že nechcete používat PIVOT, protože vrací pouze agregované výsledky. UNPIVOT vás dostane velmi blízko k tomu, co hledáte, a pak stačí na stole spojit každý sloupec. Udělal jsem příklad s údaji, které jste uvedli níže:

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

Spuštění výše uvedeného kódu vrátí:

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

Jediné další řešení, o kterém vím, je dynamické SQL a to je pomalejší a má svá nebezpečí. Pokud však kód spouštíte jednou, může to také fungovat.




  1. SQLSTATE[23000]:Porušení omezení integrity s platným omezením

  2. Příklady SIN() v SQL Server

  3. převést řádek na sloupce v oracle10g

  4. Osvědčený postup zpracování vztahů mezi tabulkami v Spring Data R2dbc