我的代码是:
DECLARE @cols AS NVARCHAR(MAX) SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.column_3) FROM table_c c where Code = 123 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') exec('SELECT column_1, ' + @cols + ' from ( select column_1 , column_2 , column_3 From table_c where Code = 123 ) x pivot ( sum(column_2) for column_3 in( ' + @cols + ' ) ) p ' )
而且我只想添加@cols列,并在总列中产生一个新列。这些列可能具有空值。
让我解释更多:
需要一个给我这样的代码
@sum_cols = 'ISNULL([c.column_3_value_1],0) + ISNULL([c.column_3_value_2],0) + ... + ISNULL([c.column_3_value_N],0)'
就像我得到的
@cols = '[c.column_3_value_1],[c.column_3_value_1],...[c.column_3_value_N]'
在我上面的代码中。
(此“ c.column_3_value _…的可能有任何字符,并且不规则)
并在我的exec查询中使用以下@sum_cols:
exec('SELECT column_1, ' + @cols + ' , ' + @sum_cols + ' As sum from ( select column_1 , column_2 , column_3 From table_c where Code = 123 ) x pivot ( sum(column_2) for column_3 in( ' + @cols + ' ) ) p ' )
你是这个意思吗
我认为您在执行后的第一个子查询之前忘记了’from’关键字…您粘贴的代码将无法运行…
DECLARE @cols AS NVARCHAR(MAX) SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.column_3) FROM table_c c where Code = 123 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') exec('SELECT column_1, ' + @cols + ' FROM ( select column_1 , column_2 , column_3 From table_c where Code = 123 ) x pivot ( sum(column_2) for column_3 in( ' + @cols + ' ) ) p ' )