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

SQL Pivot Table dinamis

Di sini Anda akan memilih nilai dalam kolom untuk ditampilkan sebagai kolom di pivot

DECLARE @cols NVARCHAR (MAX)

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

Sekarang putar kueri

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

Jika Anda ingin melakukannya di tempat yang nama kolomnya tidak dinamis, Anda dapat melakukan kueri di bawah ini

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

EDIT :

Saya memperbarui pertanyaan Anda yang diperbarui.

Deklarasikan variabel untuk memfilter data_source

DECLARE @DATASOURCE VARCHAR(20) = '1' 

Alih-alih QUOTENAME , Anda dapat menggunakan format lain untuk mendapatkan kolom untuk 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

Sekarang putar

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. Pembulatan DateTime yang tidak diinginkan di SQL Server

  2. Nilai NULL di dalam klausa NOT IN

  3. Konversi 'datetime2' menjadi 'waktu' di SQL Server (Contoh T-SQL)

  4. Menyimpan DateTime (UTC) vs. menyimpan DateTimeOffset

  5. Sisipan massal lambat untuk tabel dengan banyak indeks