Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zastępowanie wartości null w dynamicznym zapytaniu przestawnym sql

Musisz wygenerować kolejną listę kolumn dla instrukcji select i otoczyć poszczególne miesiące wartością ISNULL, tak jak poniżej:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak rzutować podciąg SQL na dziesiętny?

  2. Dlaczego kopia zapasowa SQL Server jest o wiele większa niż pliki DB?

  3. Dołącz zdalnie przechowywaną bazę danych

  4. Przesyłanie arkusza Excel i importowanie danych do bazy danych SQL Server

  5. SQL wybierz gdzie nie w podzapytaniu nie zwraca żadnych wyników