2016-08-01 100 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個表內的進一步排序順序是不確定的,如果不指定

相關問題