首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server -按列排序,而不选择该列

SQL Server -按列排序,而不选择该列
EN

Stack Overflow用户
提问于 2018-10-18 06:36:38
回答 1查看 228关注 0票数 -1

*注意: IMO,这不是重复的*有多个问题显示了相同的示例查询语句,但这些问题是关于选择随机行的。它们没有具体解释order by子句如何允许使用Select part中没有的列的语法,尽管它们解释了随机生成是如何工作的。如果上面的查询在order by列表中使用像tan(45)这样的函数,它将不起作用。那么,是什么决定了,a) ORDER by子句中允许哪些函数?b)以及为什么一些函数被添加到后台的选择列表中,而一些函数没有被添加到后台。

SQL server如何允许按newid()、rand()函数排序,即使该列不在select列表中?注意:我的问题不是关于如何生成随机数。

从mytable中选择top 1* order by newid()

SQL server规则明确规定:

ORDER BY子句中引用的列名必须对应于select列表中的列,或者对应于FROM子句中指定的表中定义的列,并且不能有任何歧义。

如果它们是免责条款,是否有具体的规则,以便我们知道如何在其他场景中进一步使用它们?

EN

回答 1

Stack Overflow用户

发布于 2018-10-18 10:26:50

这是您的查询:

select top 1 t.*
from mytable
order by newid();

order by没有对列的引用。它只有一个没有引用任何列的函数调用。所以,没有问题。

相比之下,您可以在select中包含newid()

select top 1 t.*, newid() as newid
from mytable
order by newid;

在这种情况下,newid将引用select中的别名。(因此,这也是允许的;它仅用于比较。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52864537

复制
相关文章

相似问题

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