在哪里使用 isnull 函数

where to use isnull function

我正在为我的报告使用动态数据透视表。下面是我的脚本。

   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 函数在哪里,所以它将 null 替换为零。 请指教!!

这是我的新版画 @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

这是我的新版画 @SQL

您需要声明另一个变量:

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
...