首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -3个结果的顺序

问SQL -3个结果的顺序
EN

Stack Overflow用户
提问于 2015-07-31 20:17:58
回答 3查看 47关注 0票数 0

我有个小问题。如何在SQL server中进行排序并将其返回给变量(输出)我知道如何在MySQL中做到这一点,但对MSSQL不确定,因为它没有限制函数。例如:

代码语言:javascript
复制
DECLARE @dwFirst = SELECT * FROM RANK ORDER BY dwPoints DESC (WHERE dwPoints will be best)
DECLARE @dwSecond, etc.

编辑:谢谢,但是这个SELECT TOP只适用于一个结果。

21000 - SQL ServerSubquery返回多个值。当子查询跟在=、!=、<、<=、>、>=之后或子查询用作表达式时,不允许这样做。

当我使用TOP 2的时候,它会告诉我,等等。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2015-07-31 20:21:17

在SQL Server 2012+中,您可以使用offset / fetch first row only

代码语言:javascript
复制
DECLARE @dwFirst = (SELECT <column>
                    FROM RANK
                    (WHERE dwPoints will be best)
                    ORDER BY dwPoints DESC 
                    OFFSET 0 FETCH FIRST 1 ROW ONLY
                   );

您可以更改偏移量以从后续行中获取附加值。

但是,我可能建议使用条件聚合:

代码语言:javascript
复制
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;

这样,您只需运行一次查询即可分配所有变量。

票数 2
EN

Stack Overflow用户

发布于 2015-07-31 20:20:48

SQL Server作为TOP函数。您将希望将其与ORDER BY一起使用,以便获得一致的结果

代码语言:javascript
复制
 DECLARE @dwFirst int
 SET @dwFirst = (SELECT TOP 1 dwPoints FROM RANK ORDER BY dwPoints DESC)
票数 1
EN

Stack Overflow用户

发布于 2015-07-31 20:20:46

因此,您只有一个变量,但select语句可以返回多个值,也可以返回多个列。因此,您需要在中选择单个值,并指定它来自哪一列!

代码语言:javascript
复制
DECLARE @dwFirst varchar(50) --or whatever data type
Select @dwFirst = top 1 dwpoints FROM RANK ORDER BY dwPoints DESC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31746021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档