2011-12-06 112 views
2

我想我的SQL語句使用Case語句 ,爲了使用列BY子句中使用ORDER BY是一個計算列,例如:排序在SQL Server計算列

declare @pOrderBy int 
set @pOrderBy=1 
Select ArtistId as Counting, ROW_NUMBER() OVER (ORDER BY 
CASE WHEN (@pOrderBy = 1) THEN "Counting" end) 
from master.dbo.Album 

我錯誤

Invalid column name 'Counting'. 

我想在這裏指出,在實際查詢我Counting柱就像是一個計算列:

Count(*) as Counting 
+0

這是爲什麼表中'master'的數據庫? –

+0

只是爲了測試目的 –

+0

可能是一個好主意,開始測試其他地方:) –

回答

3

您不能在與定義相同的級別重新使用列別名。

在這種情況下,我只是使用ORDER BY ArtistId而不是試圖重用別名。對於更復雜的表達式,您可以考慮在CTE中定義它或使用CROSS APPLYas discussed in this article

2

快速寫了

declare @pOrderBy int 
set @pOrderBy=1 
Select ArtistId as Counting, ROW_NUMBER() OVER (ORDER BY 
CASE WHEN (@pOrderBy = 1) THEN ArtistId end) 
from master.dbo.Album