我希望我的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
答案 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