где использовать функцию isnull

Я использую динамический сводной скрипт для своего отчета. Ниже мой скрипт.

   DECLARE @Columns VARCHAR(MAX)
set @Columns= ''

SELECT @Columns = @Columns + (QUOTENAME(RTRIM(LTRIM(cast(datename(month, [dates]) as char(15))))+',' + RTRIM(LTRIM(cast(year([dates]) as char(20))))) + ',') FROM efoxsfc.dbo.FTX_FA_Calender 
WHERE 1=1 
AND CAST(dates AS DATETIME) >= DATEADD(mm, -35 ,DATEADD(m, DATEDIFF(m, 0,GETDATE()), 0)) 
AND dates <= DATEADD(m, DATEDIFF(m, 0,GETDATE()), 0)

SET @Columns = LEFT(@Columns, LEN(@Columns) - 1)

DECLARE @SQL NVARCHAR(MAX) 
set @SQL= ''
SET @SQL =
'WITH BaseData AS
(
     select 
        vendor_code,
        RTRIM(LTRIM(cast(datename(month, [CLOSED_DATE]) as char(15))))+'','' + RTRIM(LTRIM(cast(year([CLOSED_DATE]) as char(20)))) as [CLOSED_DATE],
        count(vendor_code) as [No. of Case] 
   from #teamp t WITH (NOLOCK)
      where 
       [CLOSED_DATE] is not null
  group by 
       vendor_code, CLOSED_DATE
)   
SELECT * 
FROM BaseData
PIVOT
(
    sum([No. of Case])
    FOR CLOSED_DATE IN (' +  @Columns + ')
) AS PivotTable'

EXECUTE sp_executesql @SQL

где будет моя функция isnull, чтобы заменить ноль на ноль. Пожалуйста посоветуй !!

Это мой новый Print @SQL

   WITH BaseData AS
(
     select 
        vendor_code,
        RTRIM(LTRIM(cast(datename(month, [CLOSED_DATE]) as char(15))))+',' + RTRIM(LTRIM(cast(year([CLOSED_DATE]) as char(20)))) as [CLOSED_DATE],
        count(vendor_code) as [No. of Case] 
   from #teamp t WITH (NOLOCK)
      where 
       [CLOSED_DATE] is not null
  group by 
       vendor_code, CLOSED_DATE
)   
SELECT ISNULL([November,2012],0)AS[November,2012],ISNULL([December,2012],0)AS[December,2012],ISNULL([January,2013],0)AS[January,2013],ISNULL([February,2013],0)AS[February,2013],ISNULL([March,2013],0)AS[March,2013],ISNULL([April,2013],0)AS[April,2013],ISNULL([May,2013],0)AS[May,2013],ISNULL([June,2013],0)AS[June,2013],ISNULL([July,2013],0)AS[July,2013],ISNULL([August,2013],0)AS[August,2013],ISNULL([September,2013],0)AS[September,2013],ISNULL([October,2013],0)AS[October,2013],ISNULL([November,2013],0)AS[November,2013],ISNULL([December,2013],0)AS[December,2013],ISNULL([January,2014],0)AS[January,2014],ISNULL([February,2014],0)AS[February,2014],ISNULL([March,2014],0)AS[March,2014],ISNULL([April,2014],0)AS[April,2014],ISNULL([May,2014],0)AS[May,2014],ISNULL([June,2014],0)AS[June,2014],ISNULL([July,2014],0)AS[July,2014],ISNULL([August,2014],0)AS[August,2014],ISNULL([September,2014],0)AS[September,2014],ISNULL([October,2014],0)AS[October,2014],ISNULL([November,2014],0)AS[November,2014],ISNULL([December,2014],0)AS[December,2014],ISNULL([January,2015],0)AS[January,2015],ISNULL([February,2015],0)AS[February,2015],ISNULL([March,2015],0)AS[March,2015],ISNULL([April,2015],0)AS[April,2015],ISNULL([May,2015],0)AS[May,2015],ISNULL([June,2015],0)AS[June,2015],ISNULL([July,2015],0)AS[July,2015],ISNULL([August,2015],0)AS[August,2015],ISNULL([September,2015],0)AS[September,2015],ISNULL([October,2015],0)AS[October,2015]FROM BaseData
PIVOT
(
    sum([No. of Case])
    FOR CLOSED_DATE IN ([November,2012],[December,2012],[January,2013],[February,2013],[March,2013],[April,2013],[May,2013],[June,2013],[July,2013],[August,2013],[September,2013],[October,2013],[November,2013],[December,2013],[January,2014],[February,2014],[March,2014],[April,2014],[May,2014],[June,2014],[July,2014],[August,2014],[September,2014],[October,2014],[November,2014],[December,2014],[January,2015],[February,2015],[March,2015],[April,2015],[May,2015],[June,2015],[July,2015],[August,2015],[September,2015],[October,2015])
) AS PivotTable

Это мой новый Print @SQL


person sony921    schedule 28.10.2015    source источник


Ответы (1)


Вам нужно объявить еще одну переменную:

DECLARE @Columns2 VARCHAR(MAX) = ''

Затем сделайте главное:

SELECT @Columns2 = @Columns2 + 'ISNULL(' + (QUOTENAME(RTRIM(LTRIM(cast(datename(month, [dates]) as char(15))))+',' + RTRIM(LTRIM(cast(year([dates]) as char(20))))) + ', 0) AS ' + (QUOTENAME(RTRIM(LTRIM(cast(datename(month, [dates]) as char(15))))+',' + RTRIM(LTRIM(cast(year([dates]) as char(20))))) + ',') FROM efoxsfc.dbo.FTX_FA_Calender 
WHERE 1=1 
AND CAST(dates AS DATETIME) >= DATEADD(mm, -35 ,DATEADD(m, DATEDIFF(m, 0,GETDATE()), 0)) 
AND dates <= DATEADD(m, DATEDIFF(m, 0,GETDATE()), 0)

SET @Columns2 = LEFT(@Columns2, LEN(@Columns2) - 1)

Затем используйте его как:

...
SELECT ' + @Columns2 + '
FROM BaseData
PIVOT
...
person Giorgi Nakeuri    schedule 28.10.2015
comment
получение неправильного синтаксиса рядом с ошибкой '(', когда мы устанавливаем строку columns2 - person sony921; 29.10.2015
comment
Перед EXECUTE sp_executesql @SQL выполните print @SQL и посмотрите сгенерированный код. - person Giorgi Nakeuri; 29.10.2015
comment
Пожалуйста, найдите Print@SQL - person sony921; 29.10.2015
comment
Что найти?? В чем твоя проблема? - person Giorgi Nakeuri; 29.10.2015
comment
это дает мне неверный синтаксис рядом с '('. ошибка. Пытаюсь исправить это .. но не повезло. - person sony921; 29.10.2015
comment
ISNULL([November,2012], 0) надо идти выбирать! столбцы2 для выбора. ты читал мой ответ? Я дал вам пример, как использовать columns2 - person Giorgi Nakeuri; 29.10.2015
comment
Давайте продолжим обсуждение в чате. - person sony921; 29.10.2015
comment
Извините за недопонимание. После этого я получаю неверное имя столбца. Пожалуйста посоветуй!! - person sony921; 29.10.2015
comment
См. правки в моем ответе. Как я строю столбцы2. Ваша цель — получить: ISNULL([November,2012], 0) as [November,2012],ISNULL([December,2012], 0) AS [December,2012].... - person Giorgi Nakeuri; 29.10.2015
comment
Исправлен столбец @columns2, в котором правильно отображаются данные за месяц, но в результате отсутствует код поставщика. С ошибкой Неверный синтаксис рядом с 'FROM BaseData - person sony921; 29.10.2015
comment
Ты шутишь, что ли? Добавьте поставщика к вашему выбору. Показать сгенерированное заявление. - person Giorgi Nakeuri; 29.10.2015
comment
Я пытаюсь воспроизвести 0 с пустым сейчас ... поэтому в функции isnull я заменяю 0 пустым, но не дает мне требуемого вывода. Пожалуйста посоветуй !! - person sony921; 02.11.2015
comment
is not working ничего мне не говорит. Покажите оператор и сгенерированную строку и ошибку. - person Giorgi Nakeuri; 03.11.2015