系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 数据库 > mssql2008 > 详细页面

SQL Server2008 Order by在union子句不可直接使用的原因详解

时间:2023-12-07来源:系统城装机大师作者:佚名

按照要求,每个取top 20,既然是随机的取,那么就SQL Server Order by newid()就是了,然后把所有数据union起来就得了。所以我立即给出了答案:

1
2
3
4
5
selecttop 20 *fromxxxwheretype=1orderbynewid()
 
union
 
selecttop 20 *fromxxxwheretype=0orderbynewid()

但是在sql 查询分析器种不对,语法有错,我乍一看,好像没有问题吧:

selecttop 20 *fromxxxwheretype=1orderbynewid() 单独执行 都是没有问题得;

下面的半句也是一样的语法结构,也没有错误。但是把这两个查询union起来就错了。奇怪啊。既然提示是order附近有错,那么我将order给去掉:

去掉也是可以运行也没有错啊。也就是说在union子句中的查询不能用SQL Server Order by。但是这儿我必须要用order by啊,要不然我怎么取出随机的20条记录

最终改写成了:

1
2
3
4
5
6
7
8
9
SELECT * FROM
 
(select TOP 20 * from dbo.AngelExam where (c='无' or c=null) and (d='无' or d=null) ORDER BY newid() ) a1
 
UNION
 
SELECT * FROM
 
(select TOP 20 * from dbo.AngelExam where (c='无' or c=null) and (d='无' or d=null) ORDER BY newid()) a2

看着语句长了不少,有点怪怪得,但是没法,不知道为什么SQL Server中不能在union子句中使用order by,所以只有外围在包装一层了。

分享到:

相关信息

  • sql 实现将空白值替换为其他值

    下图中数据库中查询到的值有空值,包括空白值(“”)和null如何将上图中的null和空白值替换为其他的值呢??有人建议使用isnull()函数,但是该函数只能替换null无法替换空白...

    2023-12-07

  • SQLServer2008提示评估期已过解决方案

    打开sqlserver时提示评估期已过解决方法:打开sqlserver安装中心(注意:选择R2的安装中心)选择版本升级中途可能会出现需要重启计算机,那么请重启计算机后在进行以上操作点击确定,然...

    2023-12-07

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载