2016-08-01 2 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, employeename 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); 

Если вы можете дублировать employeename с в employeetable, то вы можете использовать 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. , , Маловероятно, что в таблице есть повторяющиеся имена - при условии, что отдельные запросы * могут * возвращать дубликаты. Если есть, то «select different» будет подходящим. –

+0

Если я делаю 'SELECT DISTINCT', тогда запрос выдает ошибку - элементы ORDER BY должны появляться в списке выбора, если указан параметр SELECT DISTINCT. – 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 не определен и может оказаться, как и все, если не указано

Смежные вопросы