我们正在使用这个小的递归脚本为表的动态头创建一个字符串 - 该变量被输入到动态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。
答案 0 :(得分:3)
使用两次引号并执行其他必需的连接。
试试这个:
select @ColumnName = ISNULL(@ColumnName + ',', '')
+ 'ISNULL(' + QUOTENAME(PlayMonth) + ', 0) as ' + QUOTENAME(PlayMonth)
from (
select distinct PlayMonth
from #PivotStep1
) as ps
select @ColumnName;