将ISNULL添加到一个小的动态头文件中

时间:2017-02-27 18:33:58

标签: sql tsql

我们正在使用这个小的递归脚本为表的动态头创建一个字符串 - 该变量被输入到动态sql中。

DROP TABLE IF EXISTS #PivotStep1;
CREATE TABLE #PivotStep1(PlayMonth VARCHAR(25))
INSERT INTO #PivotStep1
    values
        ('01-oct-2016'),
        ('01-nov-2016'),
        ('01-dec-2016'),
        ('01-jan-2017'),
        ('01-feb-2017');


DECLARE @ColumnName AS nvarchar(MAX)


SELECT @ColumnName = ISNULL(@ColumnName + ',','') 
                      + QUOTENAME(PlayMonth)
FROM (
        SELECT  DISTINCT PlayMonth 
        FROM    #PivotStep1
    ) AS ps

SELECT @ColumnName;

以上内容如下:

[01-dec-2016],[01-feb-2017],[01-jan-2017],[01-nov-2016],[01-oct-2016]

我们想要的是用ISNULL和AS包围每个列名...所以所需的输出如下:

ISNULL([01-dec-2016],0) AS [01-dec-2016],ISNULL([01-feb-2017],0) AS [01-feb-2017],ISNULL([01-jan-2017],0) AS [01-jan-2017],ISNULL([01-nov-2016],0) AS [01-nov-2016],ISNULL([01-oct-2016],0) AS [01-oct-2016]

我们希望继续使用上述递归方法,而不是使用STUFF和XML。

1 个答案:

答案 0 :(得分:3)

使用两次引号并执行其他必需的连接。

试试这个:

select @ColumnName = ISNULL(@ColumnName + ',', '') 
      + 'ISNULL(' + QUOTENAME(PlayMonth) + ', 0) as ' + QUOTENAME(PlayMonth)
from (
    select distinct PlayMonth
    from #PivotStep1
    ) as ps

select @ColumnName;

Demo