2015-06-22 19 views
4

我在嘗試替換nullzero時收到以下錯誤消息。PIVOT運算符中指定的列名「FirstName」與PIVOT參數中的現有列名衝突

在PIVOT運算符中指定的列名稱「jan」與在PIVOT參數中的現有列名稱與 衝突。下面

查詢:

select * from(select isnull(jan,0),isnull(feb,0),sum(data) as amount)as p 
pivot(
sum(amount) for month in(jan,feb)) as piv 
+0

你可以把樣本數據+預期的結果? –

+0

@ManoJohnbritto - 請* *您的問題添加樣本數據和預期結果 –

回答

1

你可以使用CTE來定義空值,然後轉動數據是這樣的:

;WITH t 
AS (
    SELECT isnull(jan, 0) AS jan 
     ,isnull(feb, 0) AS feb 
     ,sum(data) AS amount 
    FROM your_table --change this to match your table name 
    GROUP BY jan,feb 
    ) 
SELECT * 
FROM (
    SELECT t.jan 
     ,t.feb 
     ,t.amount 
    FROM t 
    ) 
pivot(sum(amount) FOR [month] IN (
      jan 
      ,feb 
      )) AS piv 
+0

Thanku尼泊爾語,爲什麼使用 –

+0

'WITH'子句可以幫助您構建查詢並執行所有的空邏輯(就您的情況而言),然後可以在查詢的第二部分中使用,而無需做任何類型的數據操作。如果你有興趣,這裏有更多關於在sql server中使用'CTE'的信息。 https://www.simple-talk.com/sql/t-sql-programming/sql-server-cte-basics/ – FutbolFan

2

這就像錯誤說你的列名是錯誤的,因爲它們會被解讀爲未命名。給他們適當的名稱:

select isnull(Jan,0), isnull(feb,0) from(select sum(data) as amount, [month] 
from yourtable group by [month])as p 
pivot(
sum(amount) for [month] in(jan,feb)) as piv 
+0

我已經給出了適當的名稱,同樣的錯誤來了 –

+0

我認爲使用「月」導致混亂,因爲這是一個保留字。它是你桌子上的一個專欄嗎? –

+0

現在我改變了我的列名,出現了相同的錯誤 –