小编典典

对枢轴中具有空值的动态列求和

sql

我的代码是:

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 
    '
    )

阅读 199

收藏
2021-05-16

共1个答案

小编典典

你是这个意思吗

我认为您在执行后的第一个子查询之前忘记了’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 
        '
        )
2021-05-16