在数据集的tsql联合中仅按联合的一个数据集排序

Chr*_*tos 1 sql t-sql union sql-order-by

我有以下问题.

设TableA(Id int,Name nvarchar(200))和TableB(Id int,Name nvarchar(200)).

如果我们运行以下查询:

SELECT *
FROM
(SELECT *
 FROM TableA) 
UNION
(SELECT *
 FROM TableB)
Run Code Online (Sandbox Code Playgroud)

我们得到了两个数据集的联合.

我的问题是我希望第二个数据集的结果按名称列排序.

为什么我需要这个的原因,是事实,表A是我的查询中的临时表,总是将举行一个记录,这个记录我想从两个数据集的工会所产生的数据集中的第一.另外,我希望NameB的多个记录按名称列排序.

不幸的是,当我尝试执行以下查询时

SELECT *
FROM
(SELECT *
 FROM TableA) 
UNION
(SELECT *
 FROM TableB
 ORDER BY Name)
Run Code Online (Sandbox Code Playgroud)

我收到一个含糊不清的错误消息,告诉我在关键字顺序附近我的语法不正确.

在此先感谢您的帮助.

Bre*_*der 5

试试这个:

select id 
     , name
  from
(select 1 as ordercol
      , a.id
      , a.name
   from tableA 
union
 select 2 as ordercol
      , b.id
      , b.name
   from tableB) i
order by ordercol, name
Run Code Online (Sandbox Code Playgroud)

错误消息导致您尝试联合两个子选择.你可以在两个选择之间放置联合,然后将其放入子选择中.在union(或union all)之后总是有一个select.我还建议你使用union all,这样可以节省时间,因为sql-server会尝试删除两个选择中的记录(在这种情况下由于ordercol-column而不可能)

我已经包含了第二个order-by列,它将在第二个之前订购第一个选择.如果先按顺序排序,再按名称排序,则应获得所需的结果.