2016-08-01 108 views
1

我已经写了一个SQL Server查询,它返回几个选择语句的联合。查询按照我的预期返回数据。使表的联合显示,以便它们应用

但它正在做的一件意想不到的事情是它按字母顺序对数据进行排序。但是,我想要的是第一个表的数据应该出现在最前面,第二个表的数据应该出现在第二个等等。

有人可以帮我吗?

select employeename from employeetable where employeename like 'vik%' 
union 
select employeename from employeetable where employeename like '% vik%' 
union 
select employeename from EmployeeTable where employeename like '%vik%' and 
              employeename not like 'vik%' and 
              employeename not like '% vik%' 
+0

加1到第一选择,2秒等 – jarlh

+0

@jarlh可能演变为任何东西:请你分享示例 – braceyourself

+1

'select 1 as ord,employeenable from employeetable ... order by ord'。 – jarlh

回答

2

你可以做到这一点没有union

select employeename 
from employeetable 
where employeename like '%vik%' 
order by (case when employeename like 'vik%' then 1 
       when employeename like '% vik%' then 2 
       else 3 
      end); 

如果你能在employeetable复制employeename S,那么你可以使用group by删除重复:

select employeename 
from employeetable 
where employeename like '%vik%' 
group by employeename 
order by (case when employeename like 'vik%' then 1 
       when employeename like '% vik%' then 2 
       else 3 
      end); 
+1

执行'SELECT DISTINCT'返回与'UNION'相同的结果。 – jarlh

+0

@jarlh。 。 。在表中存在重复名称是不太可能的 - 因为单独的查询*可能会返回重复项。如果有,那么'选择不同'将是适当的。 –

+0

如果我执行'SELECT DISTINCT',则查询会引发错误 - 如果指定了SELECT DISTINCT,则ORDER BY项必须出现在选择列表中。 – braceyourself

2

添加一列表序列

select employeename, 1 as my_order from employeetable where employeename like 'vik%' 
union 
select employeename, 2 from employeetable where employeename like '% vik%' 
union 
select employeename, 3 from EmployeeTable where employeename like '%vik%' and employeename not like 'vik%' and employeename not like '% vik%' 
order by my_order asc, empleemployeename asc; 
0
select employeename, a as _order from employeetable where employeename like 'vik%' 
union 
select employeename, b as _order from employeetable where employeename like '% vik%' 
union 
select employeename, c as _order from EmployeeTable where employeename like '%vik%' and employeename not like 'vik%' and employeename not like '% vik%' 
order by my_order asc, empleemployeename asc; 
0
select 1 s,employeename from employeetable where employeename like 'vik%' 
union 
select 2 s, semployeename from employeetable where employeename like '%vik%' 
union 
select 3 s,employeename from EmployeeTable where employeename like '%vik%' and employeename not like 'vik%' and employeename not like '% vik%'  
order by s; 

你的3个表内的进一步排序顺序是不确定的,如果不指定

相关问题