2013-10-25 25 views
0

以下是輸出從CTE當我做一個SELECT * FROM CTE_RESULTSTSQL - 似乎無法PIVOT從CTE輸出(無效的對象名稱錯誤)

Desciption Closing Balance
A 38909554.57
B -30068540.13
C 731413.26
D 182167
E -53016969.08
F 24768896.85

然後我寫了一個支點,以改變這是如何顯示的,所以我能做到這一點每個「說明」

例如的相關值進行計算進一步查詢:我想計算

A*B*C/F (ficticious calculation for lets call it "Profit" for simplicity)
C+D*E (ficticious calculation for lets call it "Profit Ratio" for simplicity)
etc

並擁有這些結果displaye d在另一個表中,例如:

Calculations RESULTS
Profit 65466787878 (random number representing the value of A*B*C/F)
Profit Ratio 345678864 (random number representing the value of C+D*E)

這就是我要去的地方。

我現在的問題是創建數據透視表。查詢SELECT * FROM CTE_RESULTS的作品,所以它不是我的CTE的問題。

然而,當我做一個支點:

SELECT [Description], [A] AS 'A', [B] AS 'B', [C] AS 'C', [D] AS 'D', [E] AS 'E', [F] AS 'F'
FROM
(SELECT [Description], [CLOSING BALANCE] FROM CTE_RESULTS) AS SRC
PIVOT (MAX([CLOSING BALANCE]) FOR [Description] IN 'A','B','C','D','E','F')) AS PVT;

我得到一個錯誤:

Invalid object name 'CTE_RESULTS'

有什麼想法?

回答

1

我可以看到您的查詢有兩個問題,但都不會導致錯誤Invalid object name 'CTE_RESULTS'

首先,您在CTE中使用單引號來引用列名稱,但只能用於別名。你需要用方括號:

FOR [Description] IN ([A],[B],[C],[D],[E],[F]) 

其次,你在你的選擇列表中引用的列[Description],但這是由樞軸刪除(因爲它正在成爲列),所以你會得到一個無效的列名錯誤。

你最終的查詢應該是這樣的:

WITH CTE_RESULTS AS 
( SELECT * 
    FROM T 
) 
SELECT [A] AS 'A', [B] AS 'B', [C] AS 'C', [D] AS 'D', [E] AS 'E', [F] AS 'F' 
FROM ( SELECT [Description], [CLOSING BALANCE] 
      FROM CTE_RESULTS 
     ) AS SRC 
     PIVOT 
     ( MAX([CLOSING BALANCE]) 
      FOR [Description] IN ([A],[B],[C],[D],[E],[F]) 
     ) AS PVT; 

其中給出:

A  |  B  | C | D | E  | F 
---------+-----------+--------+--------+-----------+---------- 
38909554 | -30068540 | 731413 | 182167 | -53016969 | 24768896 

Working Example on SQL Fiddle

+0

真棒!謝謝一堆。我太傻了。 –

+0

不用擔心,這是我傾向於避免將單引號用於任何其他文字的原因之一,塊引用永遠不會含糊不清,並且始終引用對象,而單引號可以根據其位置進行不同的解釋。這完全是主觀的,但是,儘管我沒有立即相信我在閱讀[本文]後已經採用了'alias = ColumnName'語法(http://sqlblog.com/blogs/aaron_bertrand/archive/2012/01/23/bad-習慣到開球使用-AS-INSTEAD-OF換柱aliases.aspx) – GarethD

相關問題