sql >> Databasteknik >  >> RDS >> Sqlserver

Ersätter null-värden i dynamisk pivot sql-fråga

Du måste skapa en annan kolumnlista för select-satsen och avsluta enskilda månader med ISNULL, så här:

DECLARE @cols AS NVARCHAR(MAX),
        @selectCols AS NVARCHAR(MAX),
        @query AS NVARCHAR(MAX) 

SELECT  @selectCols = STUFF
(
(
SELECT distinct ', ISNULL(' + QUOTENAME([MONTH]) + ', 0) AS ' + QUOTENAME([MONTH])
FROM   [HEADCOUNT]
WHERE  [MONTH] BETWEEN '01-012018' AND '12-01-2018'
ORDER BY ',' + QUOTENAME([MONTH])
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,''
)



SELECT  @cols = STUFF
(
(
SELECT distinct ',' + QUOTENAME([MONTH])
FROM   [HEADCOUNT]
WHERE  [MONTH] BETWEEN '01-012018' AND '12-01-2018'
ORDER BY ',' + QUOTENAME([MONTH])
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,''
)
SET     @query = 'SELECT [FTE/RATE CARD],' + @selectCols + ' FROM
(
SELECT  [MONTH],[FTE/RATE CARD],[HC]
FROM    [HEADCOUNT]
WHERE   [CC-LOC] IN ([CC-LOC]) 

) x pivot (Sum ([HC]) for [MONTH] in (' + @cols + '))p' execute(@query)



  1. MySQL-fråga för att uppdatera poster med ökat datum

  2. Plugin 'FEDERATED' är inaktiverad

  3. Hur implementeras Oracles JDBC-frågetidsgräns?

  4. Distribuera MySQL relationsdatabaser på Ubuntu 12.04 (Precis Pangolin)