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

SQL Pivot Table động

Tại đây, bạn sẽ chọn các giá trị trong một cột để hiển thị dưới dạng cột trong pivot

DECLARE @cols NVARCHAR (MAX)

SELECT @cols = COALESCE (@cols + ',[' + AvJT + ']', '[' + AvJT + ']')
               FROM    (SELECT DISTINCT AvJT FROM YourTable) PV  
               ORDER BY AvJT

Bây giờ xoay vòng truy vấn

DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT * FROM 
             (
                 SELECT date_1, StartHour,AvJT, data_source 
                 FROM YourTable
             ) x
             PIVOT 
             (
                 -- Values in each dynamic column
                 SUM(data_source)
                 FOR AvJT IN (' + @cols + ')                      
            ) p;' 

EXEC SP_EXECUTESQL @query

Nếu bạn muốn làm điều đó ở nơi tên cột không động, bạn có thể thực hiện truy vấn dưới đây

SELECT DATE_1,STARTHOUR,
MIN(CASE WHEN AvJT='00001a' THEN data_source END) [00001a],
MIN(CASE WHEN AvJT='00002a' THEN data_source END) [00002a],
MIN(CASE WHEN AvJT='00003a' THEN data_source END) [00003a],
MIN(CASE WHEN AvJT='00004a' THEN data_source END) [00004a]
FROM YOURTABLE
GROUP BY  DATE_1,STARTHOUR

CHỈNH SỬA:

Tôi đang cập nhật cho câu hỏi cập nhật của bạn.

Khai báo một biến để lọc data_source

DECLARE @DATASOURCE VARCHAR(20) = '1' 

Thay vì QUOTENAME , bạn có thể sử dụng một định dạng khác để lấy các cột cho pivot

DECLARE @cols NVARCHAR (MAX)

SELECT @cols = COALESCE (@cols + ',[' + Link_ID + ']', '[' + Link_ID + ']')
               FROM    (SELECT DISTINCT Link_ID FROM C1_May_Routes WHERE [email protected]) PV  
               ORDER BY Link_ID

Bây giờ xoay vòng

DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT * FROM 
             (
                 -- We will select the data that has to be shown for pivoting
                 -- with filtered data_source
                 SELECT date_1, StartHour,AvJT, Link_ID
                 FROM C1_May_Routes
                 WHERE data_source = '[email protected]+'
             ) x
             PIVOT 
             (
                 -- Values in each dynamic column
                 SUM(AvJT)
                 -- Select columns from @cols 
                 FOR Link_ID IN (' + @cols + ')                      
            ) p;' 

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. Làm cách nào để trả lại các kiểu dữ liệu SQL từ truy vấn của tôi?

  2. Cách thay đổi kiểu dữ liệu của cột trong SQL Server (T-SQL)

  3. Cách tạo tiện ích mở rộng cho SSMS 2019 (v18)

  4. SQL Server Express so với express localdb

  5. Cách tìm bảng chứa một cột cụ thể trong SQL Server