彼此独立地订购工会的两个部分

时间:2020-05-14 14:33:35

标签: sql sql-server

是否可以执行以下操作:

select name from table1 order by name
union
select name from table2 order by name

我知道我可以做到:

select name from table1
union
select name from table2 order by name

但是,我希望table1中的名称首先出现。我花了最后一个小时在Google上搜索,但我却一无所获。例如,我看过这里:How to order by with union in SQL?

3 个答案:

答案 0 :(得分:3)

查询需要更复杂一些:

select name
from ((select distinct name, 1 as is_1 from table1) 
      union
      (select distinct name, 0 from table2)
     ) n
group by name
order by max(is_1), name;

这在子查询中使用select distinct,因为它可以利用name上的索引。

答案 1 :(得分:2)

添加一个“排序”字段,并将union放在子查询中,以便您可以在合并后的 后进行排序。

未体验

select a.name
from (
   select name, 1 sort
   from table1

   union all

   select name, 2 sort
   from table2
) a
order by a.sort, a.name

我将其更改为union all,以明确表示此方法不会执行union。如果要查看它,也可以选择sort列。如果您不想使用重复的名称,那么这种方法将行不通。

答案 2 :(得分:0)

您需要另一列进行排序。 UNION不允许单个查询具有ORDER BY子句。

在名称之前添加一列以进行排序,这样它就可以对单个结果集进行排序。参见下面的示例:

CREATE TABLE #Table1 (Name VARCHAR(50))
CREATE TABLE #Table2 (Name VARCHAR(50))

INSERT INTO #Table1 VALUES ('Bart'), ('Lisa'), ('Maggie')
INSERT INTO #Table2 VALUES ('Chris'), ('Meg'), ('Stewie')

SELECT Name, 0 AS Sort FROM #Table1
UNION
SELECT Name, 1 AS Sort FROM #Table2
ORDER BY Sort, Name