Sql server联合但保持顺序

Afr*_*ela 23 sql-server

有没有办法结合两个表,但是保持第一个表中的行首先出现在结果集中?

例如:

表格1

name        surname
-------------------
John         Doe
Bob          Marley
Ras          Tafari
Run Code Online (Sandbox Code Playgroud)

表2

name       surname
------------------
Lucky      Dube
Abby       Arnold
Run Code Online (Sandbox Code Playgroud)

我希望结果集为:

name        surname
-------------------
John         Doe
Bob          Marley 
Ras          Tafari
Lucky      Dube
Abby       Arnold
Run Code Online (Sandbox Code Playgroud)

不幸的是,工会以某种方式重新排序表.有没有解决的办法?

pra*_*een 42

试试这个 :-

Select * 
from
( 
Select name,surname, 1 as filter
from  Table1
Union all
Select name,surname , 2 as filter
from Table2
)
order by filter
Run Code Online (Sandbox Code Playgroud)

  • @information_interchange 它的工作量较少,因为它被设计为以这种方式工作,但更多的是作为 UNION ALL 与 UNION 操作的内部处理的副作用。UNION 将始终消除查询之间重复的行。为了有效地完成此操作,服务器必须首先对行进行排序。UNION ALL 允许重复,因此不需要查询间排序。除非您指定 ORDER BY 子句,否则服务器通过不执行不必要的排序来提高性能。 (2认同)

Dam*_*ver 12

保证输出顺序的唯一方法是使用ORDER BY:

SELECT name,surname,1 as rs
FROM table1
UNION ALL
SELECT name,surname,2
FROM table2
ORDER BY rs
Run Code Online (Sandbox Code Playgroud)

如果您不想rs出现在最终结果集中,请执行以下UNION子查询:

SELECT name,surname
FROM (
  SELECT name,surname,1 as rs
  FROM table1
  UNION ALL
  SELECT name,surname,2
  FROM table2
) t
ORDER BY rs
Run Code Online (Sandbox Code Playgroud)


rud*_*hez 7

;WITH cte as (
    SELECT name, surname, 1 as n FROM table1
    UNION ALL
    SELECT name, surname, 2 as n FROM table2
    UNION ALL
    SELECT name, surname, 3 as n FROM table3
)
SELECT name, surname
FROM cte
ORDER BY n;
Run Code Online (Sandbox Code Playgroud)