使用 Row_Number() 的无效列

Bel*_*igh 3 sql-server t-sql sql-server-2008-r2

我试图只选择从查询返回的第一行。这是我的语法->

insert into @Temp (id, salesID)
select
    RN = ROW_NUMBER() OVER(order by t.psUserID)
    ,t.psUserID
from (
    select distinct 
    psUserID = rstln.Bama   
    From rusticlines rstln  
    AND tnr.Active = '1') t
WHERE RN = 1;
Run Code Online (Sandbox Code Playgroud)

我得到错误:

消息 207,级别 16,状态 1,第 51 行
无效的列名称“RN”。

我需要更改什么才能只选择第一行号?

Dan*_*her 10

对于问题中的示例,您可以跳过整个过程ROW_NUMBER()并使用TOP (1)

INSERT INTO @Temp (id, salesID)
SELECT TOP (1) 1, Bama
FROM rusticlines AS rstln  
WHERE Active = '1'
ORDER BY Bama;
Run Code Online (Sandbox Code Playgroud)

对于更复杂的查询(您需要在分区中获取第一行),您可能可以使用TOP (1) WITH TIES.


Tar*_*zer 7

SELECT 语句有一个逻辑处理顺序。任何东西都可以引用列表中比自身更靠上的项目,但不能在其自身或以下级别引用。

您的查询中尚不存在 RN。您可以使用派生表或 CTE 来修复错误。

insert into @Temp (id, salesID)
select RN, psUserID
from (
select
    RN = ROW_NUMBER() OVER(order by t.psUserID)
    ,t.psUserID
from (
    select distinct 
    psUserID = rstln.Bama   
    From rusticlines rstln       -- more syntax issues 
    AND tnr.Active = '1'         -- here
     ) t) d
WHERE RN = 1;
Run Code Online (Sandbox Code Playgroud)