Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak mogę używać osi obrotu?

Sprawdziłem Twój post techniczny tutaj i stwierdziłem, że nie chcesz używać PIVOT, ponieważ zwraca on tylko wyniki zagregowane. UNPIVOT zbliży Cię do tego, czego szukasz, a następnie po prostu połącz w tabeli dla każdej kolumny. Zrobiłem przykład z danymi, które podałeś poniżej:

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

Uruchomienie powyższego kodu zwróci:

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

Jedynym innym rozwiązaniem, jakie znam, jest dynamiczny SQL, który jest wolniejszy i niesie ze sobą niebezpieczeństwa. Jeśli jednak uruchamiasz kod tylko raz, może to również zadziałać.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Różnica między widokami a tabelami w wydajności

  2. jak uzyskać dostęp do localDB z usługi Windows

  3. Jak uzyskać listę kolumn z unikalnymi ograniczeniami w bazie danych SQL Server — samouczek SQL Server / TSQL część 98?

  4. Konwertuj plik BINARY przechowywany jako VARCHAR na BINARY

  5. SQL ta sama jednostka między dwoma tabelami wymaga numerów porządkowych w 1 komórce