Возвращает "0" для значений NULL в Dynamic Pivot для SQL Server

У меня есть следующий код:

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

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(month)                   
               from PRCombinedRM    
               group by month,AccountNumber 
        FOR XML PATH(''), TYPE      
        ).value('.', 'NVARCHAR(MAX)')       
    ,1,1,'')            

set @query = 'SELECT AccountNumber,' + 'FullName,' + 'AccountType,' + 'Company,' + 'AccountBalance,' + @cols + ' from                   
         (      
            select AccountNumber,   
                   FullName,
                   AccountType,
                   Company,
                   AccountBalance,
                   month,
                   amount
                from PRCombinedRM
            ) x 
            pivot   
            (   
                sum(amount)
                for month in (' + @cols + ')
            ) p '   

execute(@query)                 

Однако в настоящее время результаты, которые это выводит, показывают значения для "количества" как NULL, однако я хотел бы заменить значения NULL на "0". Как бы я поступил так?

В настоящее время данные выводятся как таковые:

AccountNumber   FullName    AccountType Company AccountBalance  Aug     Jul     Jun     Sep 
100 M R Test    Test Account    Test Company    100 -50 -50 NULL    -50

Однако я хотел бы, чтобы данные выводились как:

AccountNumber   FullName    AccountType Company AccountBalance  Aug     Jul     Jun     Sep 
100 M R Test    Test Account    Test Company    100 -50 -50 0   -50

Спасибо.

2 ответа

Решение

Я бы использовал другую переменную для хранения ISNULL(someColumn,0):

DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);
DECLARE @cols2 AS NVARCHAR(MAX)

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(month)                   
               from PRCombinedRM    
               group by month,AccountNumber 
        FOR XML PATH(''), TYPE      
        ).value('.', 'NVARCHAR(MAX)')       
    ,1,1,'');

SET @cols2 = STUFF((SELECT distinct ', ISNULL(' + QUOTENAME(month) + ',0) ' + QUOTENAME(month)
               from PRCombinedRM    
               group by month,AccountNumber 
        FOR XML PATH(''), TYPE      
        ).value('.', 'NVARCHAR(MAX)')       
    ,1,1,'');

set @query = 'SELECT AccountNumber,' + 'FullName,' + 'AccountType,' + 'Company,' + 'AccountBalance,' + @cols2 + ' from                   
         (      
            select AccountNumber,   
                   FullName,
                   AccountType,
                   Company,
                   AccountBalance,
                   month,
                   Amount
                from PRCombinedRM
            ) x 
            pivot   
            (   
                sum(amount)
                for month in (' + @cols + ')
            ) p ';

execute(@query);   

Вы можете изменить @cols определение:

SET @cols = STUFF((SELECT distinct ', coalesce(' + QUOTENAME(month) ', 0) as ' + QUOTENAME(month)                 
               from PRCombinedRM    
               group by month,AccountNumber 
        FOR XML PATH(''), TYPE      
        ).value('.', 'NVARCHAR(MAX)')       
    , 1, 2,'')            
Другие вопросы по тегам