SQL - 订购3个结果

时间:2015-07-31 12:17:58

标签: sql sql-server

我没有什么问题。如何在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等时说它

谢谢!

3 个答案:

答案 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