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

SQL Server - Bao gồm NULL bằng UNPIVOT

Để bảo toàn NULL, hãy sử dụng CROSS JOIN ... CASE:

select a.ID, b.column_name
, column_value = 
    case b.column_name
      when 'col1' then a.col1
      when 'col2' then a.col2
      when 'col3' then a.col3
      when 'col4' then a.col4
    end
from (
  select ID, col1, col2, col3, col4 
  from table1
  ) a
cross join (
  select 'col1' union all
  select 'col2' union all
  select 'col3' union all
  select 'col4'
  ) b (column_name)

Thay vì:

select ID, column_name, column_value
From (
  select ID, col1, col2, col3, col4
  from table1
  ) a
unpivot (
  column_value FOR column_name IN (
    col1, col2, col3, col4)
  ) b

Một trình soạn thảo văn bản với chế độ cột làm cho các truy vấn như vậy dễ viết hơn. UltraEdit có nó, Emacs cũng vậy. Trong Emacs, nó được gọi là chỉnh sửa hình chữ nhật.

Bạn có thể cần phải viết nó cho 100 cột.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận danh sách các ngày giữa hai ngày bằng cách sử dụng một hàm

  2. SQL Ràng buộc duy nhất trên nhiều bảng

  3. Làm cách nào để kết nối với mssql bằng pdo thông qua PHP và Linux?

  4. Cắt bớt tất cả các bảng trong Cơ sở dữ liệu trong SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 55

  5. SQL Server * =Toán tử?