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.
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)
| 归档时间: |
|
| 查看次数: |
2373 次 |
| 最近记录: |