2013-05-22 80 views
2

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

我想使用pivot操作符并且没有其他方式创建数据透视表。我发现this,但不幸的是第一个答案不是很详细。

回答

4

链接的第一个答案中的建议是用一个非空标记值代替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 

这似乎是一个黑客位,并很容易受到破坏,如果你不选择可以从来没有出现在数据的值。

我会这样做,而不使用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 
+0

因此,它不可能与枢轴运算符? – user764754

+0

@ user764754 - 'IN'与'='有相同的语义,并且在NULL时不会计算为真(除非可能改变'ANSI_NULLS'设置,我还没有打算测试它,因为它已被弃用) –