在SQL Server中按计算列排序

时间:2011-12-06 12:23:39

标签: sql tsql

我希望我的sql语句使用Case语句使用order by子句 并且按顺序使用的列是计算列,例如:

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

2 个答案:

答案 0 :(得分:3)

您不能在与定义相同的级别重用列别名。

在这种情况下,我只使用ORDER BY ArtistId而不是尝试重用别名。对于更复杂的表达式,您可以考虑在CTE或CROSS APPLY as discussed in this article中定义它。

答案 1 :(得分: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