我没有什么问题。如何在SQL服务器排序中将其返回到变量(输出) 我知道如何在MySQL中执行此操作,但不确定MSSQL,因为没有限制功能。 例如:
DECLARE @dwFirst = SELECT * FROM RANK ORDER BY dwPoints DESC (WHERE dwPoints will be best)
DECLARE @dwSecond, etc.
编辑:谢谢,但这个SELECT TOP仅适用于一个结果。
21000 - [SQL Server]子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
当我使用TOP 2等时说它
谢谢!答案 0 :(得分:2)
在SQL Server 2012+中,您可以使用offset / fetch first row only
:
DECLARE @dwFirst = (SELECT <column>
FROM RANK
(WHERE dwPoints will be best)
ORDER BY dwPoints DESC
OFFSET 0 FETCH FIRST 1 ROW ONLY
);
您可以更改偏移量以从后续行中获取其他值。
但是,我可能会建议条件聚合:
select @dwFirst = max(case when seqnum = 1 then col end),
@dwSecond = max(case when seqnum = 2 then col end),
@dwThird = max(case when seqnum = 3 then col end)
from (select col, row_number() over (order by dwpoints desc) as seqnum
from . . .
) t;
这样,您只运行一次查询以分配所有变量。
答案 1 :(得分:1)
SQL Server作为TOP
函数。您需要将其与ORDER BY
一起使用,以便获得一致的结果
DECLARE @dwFirst int
SET @dwFirst = (SELECT TOP 1 dwPoints FROM RANK ORDER BY dwPoints DESC)
答案 2 :(得分:0)
因此,您只有一个变量,但是select语句可以返回多个值以及多个列。因此,您需要选择一个值,并指定它来自哪个列!
DECLARE @dwFirst varchar(50) --or whatever data type
Select @dwFirst = top 1 dwpoints FROM RANK ORDER BY dwPoints DESC