2009-06-23 26 views
3
select 
    sp_una_stl_key, 
    row_number() over(order by sp_una_stl_key)as stl_key 
from   
    t_unit_data_archive 
where 
    stl_key>=10 

,不執行該查詢,拋出,ROW_NUMBER()在SQLServer的

消息207,級別16,狀態1,行2 無效的列名稱stl_key'。

我不明白是什麼問題。請幫幫我!

+0

非常感謝你 – Partha 2009-06-23 13:11:43

回答

8

不能直接使用ROW_NUMBER - 你需要將它打包公用表表達式像這裏面:

with CTE as 
(
    select 
    sp_una_stl_key, row_number() over(order by sp_una_stl_key) as stl_key 
    from 
    t_unit_data_archive 
) 
select * 
from CTE 
where stl_key >= 10 

馬克

+1

我敢肯定,你不必「包裝它在一個cte。您可以在常規選擇語句中使用它。 – Joel 2009-06-23 13:10:49

1

另一種方式,儘管我寧願CTE

select * from (select 
    sp_una_stl_key, 
    row_number() 
    over(order by sp_una_stl_key)as stl_key 
from   
    t_unit_data_archive) x 
where 
    stl_key>=10 
1

您不能在where子句中使用別名字段。這應該工作:

select * from 
(select sp_una_stl_key, row_number() over(order by sp_una_stl_key)as stl_key 
from t_unit_data_archive) a 
where stl_key>=10