我有以下问题。
让TableA(Id int,Name nvarchar(200))和TableB(Id int,Name nvarchar(200))。
如果我们运行以下查询:
SELECT *
FROM
(SELECT *
FROM TableA)
UNION
(SELECT *
FROM TableB)
我们得到两个数据集的并集。
我的问题是我希望第二个数据集的结果按名称列排序。
我之所以需要这个,是因为TableA是我查询中的临时表,总是会保存一条记录,而这条记录我希望成为两个数据集联合的结果数据集中的第一个。另外,我希望NameB的多个记录按名称列排序。
不幸的是,当我尝试执行以下查询时
SELECT *
FROM
(SELECT *
FROM TableA)
UNION
(SELECT *
FROM TableB
ORDER BY Name)
我收到一条含糊不清的错误消息,告知我关键字顺序附近的语法不正确。
提前感谢您的帮助。
答案 0 :(得分: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
错误消息导致您尝试合并两个子选择。你可以在两个选择之间放置联合,然后将其放入子选择中。在union(或union all)之后总是有一个select。我还建议您使用union all,这样可以节省时间,因为sql-server会尝试删除两个选择中的记录(在这种情况下由于ordercol-column而不可能)
我已经包含了第二个order-by列,它将在第二个之前对第一个选择进行排序。如果您先按名称排序,然后按名称排序,则应获得所需的结果。