2013-05-22 83 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'設置,我還沒有打算測試它,因爲它已被棄用) –