我有个小问题。如何在SQL server中进行排序并将其返回给变量(输出)我知道如何在MySQL中做到这一点,但对MSSQL不确定,因为它没有限制函数。例如:
DECLARE @dwFirst = SELECT * FROM RANK ORDER BY dwPoints DESC (WHERE dwPoints will be best)
DECLARE @dwSecond, etc.编辑:谢谢,但是这个SELECT TOP只适用于一个结果。
21000 - SQL ServerSubquery返回多个值。当子查询跟在=、!=、<、<=、>、>=之后或子查询用作表达式时,不允许这样做。
当我使用TOP 2的时候,它会告诉我,等等。
谢谢!
发布于 2015-07-31 20:21:17
在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;这样,您只需运行一次查询即可分配所有变量。
发布于 2015-07-31 20:20:48
SQL Server作为TOP函数。您将希望将其与ORDER BY一起使用,以便获得一致的结果
DECLARE @dwFirst int
SET @dwFirst = (SELECT TOP 1 dwPoints FROM RANK ORDER BY dwPoints DESC)发布于 2015-07-31 20:20:46
因此,您只有一个变量,但select语句可以返回多个值,也可以返回多个列。因此,您需要在中选择单个值,并指定它来自哪一列!
DECLARE @dwFirst varchar(50) --or whatever data type
Select @dwFirst = top 1 dwpoints FROM RANK ORDER BY dwPoints DESChttps://stackoverflow.com/questions/31746021
复制相似问题