求一个sql语句

秋杨 2013-11-28 03:53:20
其实需求很简单,用两种不同的方式查询一个表,然后排序,
例如表TB

select * from TB where.... --SQL1

select * from TB where.... --SQL2

想要的查询结果是:先SQL1后SQL2的排序

使用union all可以实现,但可能会出现重复语句,使用union会默认按照标识字段排序。

请问有什么方法可以解决吗?
...全文
132 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋杨 2013-11-28
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
[quote=引用 4 楼 liqiuyang9 的回复:] 1楼和2楼是对两个查询添加一个字段,然后按照这个字段进行排序,懂了。 3楼的方法会进行尝试,但因为where条件语句很长,不知道可不可行。 谢谢各位。
3楼的方式先不说数据对不对,性能会不高[/quote] 嗯,性能方面还不是很懂,但那种确实存储过程就要写很长。 谢谢
發糞塗牆 2013-11-28
  • 打赏
  • 举报
回复
引用 4 楼 liqiuyang9 的回复:
1楼和2楼是对两个查询添加一个字段,然后按照这个字段进行排序,懂了。 3楼的方法会进行尝试,但因为where条件语句很长,不知道可不可行。 谢谢各位。
3楼的方式先不说数据对不对,性能会不高
秋杨 2013-11-28
  • 打赏
  • 举报
回复
1楼和2楼是对两个查询添加一个字段,然后按照这个字段进行排序,懂了。 3楼的方法会进行尝试,但因为where条件语句很长,不知道可不可行。 谢谢各位。
lzw_0736 2013-11-28
  • 打赏
  • 举报
回复

select * from TB where.... --SQL1
union all
select * from TB where.... --SQL2 and not exists(select * from TB where.... --SQL1+條件)
LongRui888 2013-11-28
  • 打赏
  • 举报
回复

create table tb(id int)

insert into tb
select 2 union all
select 1 union all
select 3

select * from tb
/*
id
2
1
3
*/


--在去重后,仍然保持原来的顺序
select id
from 
(
	select *,
		   ROW_NUMBER() over(order by getdate()) as rownum
	from tb

	union

	select *,
		   ROW_NUMBER() over(order by getdate()) as rownum
	from tb
)t
order by rownum
/*
2
1
3
*/
發糞塗牆 2013-11-28
  • 打赏
  • 举报
回复
select * from ( select *,1 as oid from tb where --sql1 union all select *,2 as oid from tb where --sql2)a order by oid

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧