2016-08-01 5 views
1

Ich habe eine SQL Server-Abfrage geschrieben, die die Vereinigung einiger select-Anweisungen zurückgibt. Die Abfrage gibt die Daten wie erwartet zurück.Die Vereinigung der Tabelle erscheint in der Reihenfolge, in der sie angewendet werden

Aber eine unerwartete Sache ist es, dass es die Daten in alphabetischer Reihenfolge sortiert. Was ich jedoch will, ist, dass die Daten der ersten Tabelle oben erscheinen und die Daten der zweiten Tabelle als zweite erscheinen sollen.

Kann mir jemand dabei helfen?

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 In der ersten Auswahl, 2 auf dem zweiten usw. – jarlh

+0

@jarlh: Könnten Sie bitte Teilen Sie das Beispiel – braceyourself

+1

'wählen Sie 1 als ord, employeename von employeetable ... order by ord'. – jarlh

Antwort

2

Sie können dies tun, ohne 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); 

Wenn Sie employeename s in employeetable duplizieren können, dann können Sie group by verwenden Duplikate zu entfernen:

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

Geben Sie 'SELECT DISTINCT' zurück, um dasselbe wie' UNION' zu erhalten. – jarlh

+0

@jarlh. . . Es ist unwahrscheinlich, dass doppelte Namen in der Tabelle vorhanden sind - vorausgesetzt, die separaten Abfragen * können * Duplikate zurückgeben. Wenn dies der Fall ist, wäre 'select distinct' angemessen. –

+0

Wenn ich 'SELECT DISTINCT' auswähle, dann löst die Abfrage einen Fehler aus - ORDER BY-Elemente müssen in der Auswahlliste erscheinen, wenn SELECT DISTINCT angegeben ist. – braceyourself

2

eine Spalte hinzufügen für die Tabellenfolge

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; 

Ihre weitere Sortierreihenfolge in Ihren 3-Tabellen ist nicht definiert und als etwas herausstellen könnte, wenn nicht angegeben

Verwandte Themen