加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Union 中使用Order by

发布时间:2020-12-12 14:55:24 所属栏目:MsSql教程 来源:网络整理
导读:用Union All 合并多个表时,如果要每个表都按表内某个字段排序,然后再合并成一个表(顺序不变),在UNION ALL 的每个段内可以用子查询,然后在子查询内运用TOP与ORDER BY,但是在实践的过程中,发现了一个奇怪的地方。 有以下两表 #t1: 序号??????????? ---

用Union All 合并多个表时,如果要每个表都按表内某个字段排序,然后再合并成一个表(顺序不变),在UNION ALL 的每个段内可以用子查询,然后在子查询内运用TOP与ORDER BY,但是在实践的过程中,发现了一个奇怪的地方。

有以下两表

#t1:

序号???????????

--------------

1981
608
3448
4150
7114

?

#t2:

序号

--------------

8046
5288
3955
3956
4987

要达到的效果:

序号

---------------------

608
1981
3448
4150
7114

3955
3956
4987
5288
8046

说明:前五行是#t1的,后五行是#t2的,每个子表内的行都是按“序号”进行排序

当SQL语句如下所写时:

select * from
(
select top 100 percent ?*? From #t1 order by 序号
) a
union all
select * From
(
select top 100 percent ?* ?From #t2 order by 序号
) a

?

结果是:

序号

---------------------------

1981
608
3448
4150
7114
8046
5288
3955
3956
4987

?

可以看到,并不是要求的结果。

但是如果SQL语句的写法是:

select * from
(
select top 99.99999 percent ?* ?From #t1 order by Prodid
) a
union all
select * From
(
select top 99.99999 percent ?*? From #t2 order by Prodid
) a

?

结果达到了预期。

?

这两段语句的差别就只在于top后面的百分数。难道是100时,SQLSERVER不管三七二十一就把全部数据取出来了,也不排序什么的?呵呵,还未找到答案。

用的SQL SERVER是2005。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读