用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] 举报,一经查实,本站将立刻删除。