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

SQL Server:Chuyển đổi hàng thành cột

Một cách để làm điều đó nếu tagID các giá trị được biết trước là sử dụng kết hợp có điều kiện

 SELECT TimeSeconds,
       COALESCE(MAX(CASE WHEN TagID = 'A1' THEN Value END), 'n/a') A1,
       COALESCE(MAX(CASE WHEN TagID = 'A2' THEN Value END), 'n/a') A2,
       COALESCE(MAX(CASE WHEN TagID = 'A3' THEN Value END), 'n/a') A3,
       COALESCE(MAX(CASE WHEN TagID = 'A4' THEN Value END), 'n/a') A4
  FROM table1
 GROUP BY TimeSeconds
 

hoặc nếu bạn đồng ý với NULL các giá trị thay vì 'n/a'

 SELECT TimeSeconds,
       MAX(CASE WHEN TagID = 'A1' THEN Value END) A1,
       MAX(CASE WHEN TagID = 'A2' THEN Value END) A2,
       MAX(CASE WHEN TagID = 'A3' THEN Value END) A3,
       MAX(CASE WHEN TagID = 'A4' THEN Value END) A4
  FROM table1
 GROUP BY TimeSeconds
 

hoặc với PIVOT

 SELECT TimeSeconds, A1, A2, A3, A4
  FROM
(
  SELECT TimeSeconds, TagID, Value
    FROM table1
) s
PIVOT
(
  MAX(Value) FOR TagID IN (A1, A2, A3, A4)
) p
 

Đầu ra (với NULL s):

 Thời gian Giây A1 A2 A3 A4 ------------- ---------------- ----- 1378700244 3,75 NULL NULL NULL1378700245 30,00 NULL NULL NULL1378700304 1,20 NULL NULL 1378700305 NULL 56,00 NULL NULL1378700344 NULL 11,00 NULL 1378700345 NULL 0,53 NULL1378700364 4,00 NULL NULL1378700365 14,50 NULL NULL1378700384 144,00 NULL 

Nếu bạn phải tìm TagID giá trị ra ngoài động rồi sử dụng SQL động

 DECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX)

SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(TagID)
            FROM Table1
            ORDER BY 1
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)'),1,1,'')

SET @sql = 'SELECT TimeSeconds, ' + @cols + '
              FROM
            (
              SELECT TimeSeconds, TagID, Value
                FROM table1
            ) s
            PIVOT
            (
              MAX(Value) FOR TagID IN (' + @cols + ')
            ) p'

EXECUTE(@sql)
 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truyền một mảng tham số vào một thủ tục được lưu trữ

  2. Cập nhật cột dựa trên một cột cập nhật khác

  3. Các giao dịch lồng nhau trong Sql Server

  4. Lợi ích của việc sử dụng cú pháp Khối mã hàng trong câu lệnh chèn T-Sql là gì?

  5. Sử dụng điều kiện if trong SQL Server chèn