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

SQL Server:Cột thành hàng

Bạn có thể sử dụng hàm UNPIVOT để chuyển các cột thành hàng:

select id, entityId,
  indicatorname,
  indicatorvalue
from yourtable
unpivot
(
  indicatorvalue
  for indicatorname in (Indicator1, Indicator2, Indicator3)
) unpiv;

Lưu ý, các kiểu dữ liệu của các cột bạn đang hủy chia phải giống nhau, do đó bạn có thể phải chuyển đổi các kiểu dữ liệu trước khi áp dụng việc hủy chia.

Bạn cũng có thể sử dụng CROSS APPLY với UNION ALL để chuyển đổi các cột:

select id, entityid,
  indicatorname,
  indicatorvalue
from yourtable
cross apply
(
  select 'Indicator1', Indicator1 union all
  select 'Indicator2', Indicator2 union all
  select 'Indicator3', Indicator3 union all
  select 'Indicator4', Indicator4 
) c (indicatorname, indicatorvalue);

Tùy thuộc vào phiên bản SQL Server của bạn, bạn thậm chí có thể sử dụng ÁP DỤNG CROSS với mệnh đề VALUES:

select id, entityid,
  indicatorname,
  indicatorvalue
from yourtable
cross apply
(
  values
  ('Indicator1', Indicator1),
  ('Indicator2', Indicator2),
  ('Indicator3', Indicator3),
  ('Indicator4', Indicator4)
) c (indicatorname, indicatorvalue);

Cuối cùng, nếu bạn có 150 cột cần giải nén và bạn không muốn viết mã cố định toàn bộ truy vấn, thì bạn có thể tạo câu lệnh sql bằng cách sử dụng SQL động:

DECLARE @colsUnpivot AS NVARCHAR(MAX),
   @query  AS NVARCHAR(MAX)

select @colsUnpivot 
  = stuff((select ','+quotename(C.column_name)
           from information_schema.columns as C
           where C.table_name = 'yourtable' and
                 C.column_name like 'Indicator%'
           for xml path('')), 1, 1, '')

set @query 
  = 'select id, entityId,
        indicatorname,
        indicatorvalue
     from yourtable
     unpivot
     (
        indicatorvalue
        for indicatorname in ('+ @colsunpivot +')
     ) u'

exec sp_executesql @query;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thực hiện:Tạo trình kích hoạt cho ngày sửa đổi cập nhật tự động với SQL Server 2008

  2. Làm cách nào để kích hoạt MSDTC trên SQL Server?

  3. Tối ưu hóa hiệu suất XML Server XML

  4. Tablix:Lặp lại các hàng tiêu đề trên mỗi trang không hoạt động - Trình tạo Báo cáo 3.0

  5. Công cụ cho dữ liệu bảng kịch bản