Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Динамична SQL Pivot Table

Тук ще изберете стойностите в колона, които да се покажат като колона в обобщената част

DECLARE @cols NVARCHAR (MAX)

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

Сега завъртете заявката

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

Ако искате да го направите там, където имената на колони не са динамични, можете да направите заявката по-долу

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

РЕДАКТИРАНЕ:

Актуализирам за вашия актуализиран въпрос.

Декларирайте променлива за филтриране на data_source

DECLARE @DATASOURCE VARCHAR(20) = '1' 

Вместо QUOTENAME , можете да използвате друг формат, за да получите колоните за завъртане

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

Сега завъртете

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. Команда за заспиване в T-SQL?

  2. Какво представлява системата за управление на база данни и релационни бази данни (RDBMS)

  3. Проблем с групово вмъкване на редов терминатор

  4. Разбиране на псевдонима на колона в Select Query в SQL Server - SQL Server / TSQL урок, част 115

  5. Оценка на присъединяване на SQL Server с помощта на грубо подравняване на хистограма