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)
我收到一个含糊不清的错误消息,告诉我在关键字顺序附近我的语法不正确.
在此先感谢您的帮助.
试试这个:
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列,它将在第二个之前订购第一个选择.如果先按顺序排序,再按名称排序,则应获得所需的结果.