如何在sql中使用order by with union all?

新手上路,请多包涵

我尝试了下面给出的 sql 查询:

 SELECT * FROM (SELECT *
FROM TABLE_A ORDER BY COLUMN_1)DUMMY_TABLE
UNION ALL
SELECT * FROM TABLE_B

它会导致以下错误:

ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP 或 FOR XML。

我需要在 union all 中使用 order by。我该如何做到这一点?

原文由 Wella 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 543
2 个回答
SELECT  *
FROM
        (
            SELECT * FROM TABLE_A
            UNION ALL
            SELECT * FROM TABLE_B
        ) dum
-- ORDER BY .....

但是,如果您想在结果列表的顶部拥有来自 Table_A 的所有记录,您可以添加可用于订购的用户定义值,

 SELECT  *
FROM
        (
            SELECT *, 1 sortby FROM TABLE_A
            UNION ALL
            SELECT *, 2 sortby FROM TABLE_B
        ) dum
ORDER   BY sortby

原文由 John Woo 发布,翻译遵循 CC BY-SA 3.0 许可协议

最后一个 UNION 之后的 ORDER BY 应该适用于由 union 连接的两个数据集。

解决方案如下图:

 SELECT *,id AS sameColumn1 FROM Locations
UNION ALL
SELECT *,id AS sameColumn2 FROM Cities
ORDER BY sameColumn1,sameColumn2

原文由 Efrat Ifergan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进