微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Union 中使用Order by

用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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐