【问题标题】:Pivot table with null column具有空列的数据透视表
【发布时间】:2013-05-17 08:11:58
【问题描述】:

使用 sql server 我想创建一个包含空列的数据透视表。我试过了:

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”。

我想使用数据透视运算符而不是其他方法来创建数据透视表。我找到了this,但不幸的是,第一个答案不是很详细。

【问题讨论】:

    标签: sql-server tsql pivot


    【解决方案1】:

    链接中第一个答案中的建议是用非空标记值代替 NULL 并在 PIVOT 中使用它。

    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 
    

    如果您不选择一个 可以 永远不会出现在数据中的值,这似乎有点 hack 并且很容易被破坏。

    我会在不使用PIVOT 关键字的情况下执行此操作,然后检查IS 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 
    

    【讨论】:

    • 所以使用枢轴运算符根本不可能?
    • @user764754 - IN 与 = 具有相同的语义,并且对于 NULL 不评估为 true(除非您更改 ANSI_NULLS 设置。我没有费心测试这个因为它已被弃用)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2019-08-15
    • 2017-08-20
    • 1970-01-01
    相关资源
    最近更新 更多