Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tôi có thể sử dụng pivot như thế nào?

Tôi đã kiểm tra thông tin đăng công nghệ của bạn tại đây và tôi thấy rằng bạn không muốn sử dụng PIVOT vì nó chỉ trả về kết quả tổng hợp. UNPIVOT sẽ đưa bạn đến rất gần những gì bạn đang tìm kiếm và sau đó chỉ cần thực hiện một phép nối trên bảng cho mỗi cột. Tôi đã làm một ví dụ với dữ liệu bạn cung cấp bên dưới:

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

Chạy đoạn mã trên sẽ trả về:

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

Giải pháp khác duy nhất mà tôi biết là SQL động và nó chậm hơn và có nhiều nguy hiểm. Tuy nhiên, nếu bạn đang chạy một lần mã cũng có thể hoạt động.




  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àng buộc SQL DEFAULT để Chèn cột có giá trị mặc định vào bảng SQL Server

  2. Làm thế nào để tìm phụ thuộc khóa ngoại trong SQL Server?

  3. SQL Server 2008 sử dụng CPU cao

  4. SQL, Chọn giữa ngày / giờ

  5. SQL Server - Trong mệnh đề có một biến được khai báo