Faire apparaître l'union de la table dans l'ordre où ils sont appliqués

J'ai écrit une requête SQL Server qui renvoie l'union de quelques instructions select. La requête renvoie datatables comme je l'espère.

Mais une chose inattendue est de classr datatables par ordre alphabétique. Cependant, ce que je veux, c'est que datatables de la première table doivent apparaître en haut et datatables de la deuxième table devraient apparaître en deuxième position et ainsi de suite.

Quelqu'un peut-il m'aider avec ça?

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%' 

append une colonne pour la séquence de table

 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; 

Vous pouvez le faire sans 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); 

Si vous pouvez dupliquer employeename s dans employeetable , vous pouvez utiliser group by pour supprimer les duplicates:

 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); 
 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; 
 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; 

votre ordre de sorting supplémentaire dans vos 3 tables est indéfini et pourrait s'avérer comme n'importe quoi si non spécifié