Sql server 具有空列的透视表

Sql server 具有空列的透视表,sql-server,tsql,pivot,Sql Server,Tsql,Pivot,我想使用SQLServer创建一个包含空列的透视表。我试过: SELECT account_no, SUM([500]) AS [500], SUM([NULL]) AS [the_null_col] FROM (SELECT * FROM source_table) AS x PIVOT (SUM(amount) FOR amount_debit IN ([500], [NULL])) AS y GROUP BY account_no 但我只得到:PIVOT操作符中提供了不正确的值“NULL

我想使用SQLServer创建一个包含空列的透视表。我试过:

SELECT account_no, SUM([500]) AS [500], SUM([NULL]) AS [the_null_col]
FROM (SELECT * FROM source_table) AS x
PIVOT (SUM(amount) FOR amount_debit IN ([500], [NULL])) AS y
GROUP BY account_no
但我只得到:PIVOT操作符中提供了不正确的值“NULL”


我想使用pivot操作符,而不是其他创建pivot表的方法。不幸的是,我发现第一个答案不是很详细。

链接中第一个答案中的建议是用非null sentinel值代替
null
,并在
透视中使用该值

SELECT account_no,
       [500],
       [-1] AS [Null]
FROM   (SELECT amount,
               ISNULL(amount_debit, -1) AS amount_debit,
               account_no
        FROM   source_table) AS x 
        PIVOT (SUM(amount) FOR amount_debit IN ([500], [-1])) AS y 
这似乎有点像黑客攻击,如果您不选择一个永远不会出现在数据中的值,则很容易被破坏

如果不使用
PIVOT
关键字,那么检查
是否为NULL就很简单了

SELECT account_no,
       SUM(CASE
             WHEN amount_debit = 500 THEN amount
           END) AS [500],
       SUM(CASE
             WHEN amount_debit IS NULL THEN amount
           END) AS [NULL]
FROM   source_table
GROUP  BY account_no 

链接中第一个答案中的建议是用非空sentinel值代替
null
,并在
透视中使用该值

SELECT account_no,
       [500],
       [-1] AS [Null]
FROM   (SELECT amount,
               ISNULL(amount_debit, -1) AS amount_debit,
               account_no
        FROM   source_table) AS x 
        PIVOT (SUM(amount) FOR amount_debit IN ([500], [-1])) AS y 
这似乎有点像黑客攻击,如果您不选择一个永远不会出现在数据中的值,则很容易被破坏

如果不使用
PIVOT
关键字,那么检查
是否为NULL就很简单了

SELECT account_no,
       SUM(CASE
             WHEN amount_debit = 500 THEN amount
           END) AS [500],
       SUM(CASE
             WHEN amount_debit IS NULL THEN amount
           END) AS [NULL]
FROM   source_table
GROUP  BY account_no 

因此,使用pivot操作符根本不可能?
中的@user764754-
=
具有相同的语义,并且对于
NULL
(除非您更改
ANSI_NULLS
设置。我没有费心测试它,因为它已被弃用)因此,使用pivot操作符根本不可能?
中的@user764754-
=
具有相同的语义,并且对于
NULL
(除非您更改
ANSI_NULLS
设置。我没有费心测试它,因为它已被弃用)