2016-11-07 82 views
0

我有两个查询,我进一步做一个联合来获得不同的结果。目前,它们按名称按字母顺序排序。查询排序顺序问题

查询1:

Corporate Comp D 
Corporate Comp E 

查询2:

Corporate Comp A 
Corporate Comp B 
Corporate Comp D 
Corporate Comp E 
Corporate Comp G 

所以联盟之后,结果是ABDE G.和字母顺序排列的顺序,但是,我想它首先订购查询,所以基本上我希望以类似

最终排序查询

Corporate Comp D 
Corporate Comp E 
Corporate Comp A 
Corporate Comp B 
Corporate Comp G 
01工作
+0

(1)什么数据库您使用的? (2)每个查询中是否有重复项? –

+0

是的,可以有重复的,使用SQL Server – user2675939

回答

2

在这种情况下,请勿使用UNION。这里是一个另类:

select qq.col 
from ((select q.col, 1 as which 
     from query1 q 
    ) union all 
     (select q.col, 2 as which 
     from query2 q 
     where not exists (select 1 from query1 q1 where q1.col = q.col) 
    ) 
    ) qq 
order by qq.which, qq.col; 

或者,你可以使用聚合:

select qq.col 
from ((select q.col, 1 as which 
     from query1 q 
    ) union all 
     (select q.col, 2 as which 
     from query2 q 
    ) 
    ) qq 
group by qq.col 
order by min(qq.which), qq.col; 
0

你可以试试这个: -

select 
    * 
from 
(
    select col from query1 
    union 
    select col from query2 
) d 
order by 
    case when col in (select col from query1) then 0 else 1 end, 
    col 
0
select  col 

from  (   select distinct 1 as i,col from query1 
      union all (select 2,col from query2 minus select 2,col from query1) 
      ) t 

order by i,col  
;