Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana saya bisa menggunakan pivot?

Saya telah memeriksa postingan teknologi Anda di sini dan saya menemukan bahwa Anda tidak ingin menggunakan PIVOT karena hanya mengembalikan hasil agregat. UNPIVOT akan membuat Anda sangat dekat dengan apa yang Anda cari dan kemudian hanya melakukan join pada tabel untuk setiap kolom. Saya membuat contoh dengan data yang Anda berikan di bawah ini:

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

Menjalankan kode di atas akan mengembalikan:

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

Satu-satunya solusi lain yang saya tahu adalah SQL dinamis dan itu lebih lambat dan berbahaya. Namun, jika Anda menjalankan kode satu kali, itu juga bisa berfungsi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hasil SSMS ke Kotak - CRLF tidak disimpan dalam salin/tempel - ada teknik yang lebih baik?

  2. Berapa ukuran batch yang direkomendasikan untuk SqlBulkCopy?

  3. Ganti nama Tipe Data Buatan Pengguna di SQL Server (T-SQL)

  4. Login SQL Server Lintas Domain Menggunakan Otentikasi Windows

  5. Layanan pelaporan MS membatasi jumlah baris