【问题标题】:Order result sets in a UNION [duplicate]在 UNION 中排序结果集 [重复]
【发布时间】:2012-12-14 19:43:50
【问题描述】:

可能重复:
Results order with union query

我使用的是 SQL Server 2008。

我有 2 个使用 UNION 加入的选择。第二个选择添加一行。我希望这一行始终显示在底部。我该怎么做?

【问题讨论】:

  • 我的查询是按第一列字符排序的,它是按字母顺序排列的
  • @MikeChristensen 为什么要自动执行此操作? documentation 中没有提到保留数据的顺序。由于没有ALLUNION 会删除重复项,这意味着SQL Server 很有可能首先在内部对数据进行排序以进行处理。作为一个简单而人为的例子,这对我来说在 2 之前返回 1:select 2 union select 1 union select 1

标签: sql sql-server sql-server-2008


【解决方案1】:

您可以在联合查询的每个部分中包含另一列并使用它进行排序:-

select col1, col2, col3 from
(
select col1, col2, col3, 1 as sortorder from table1
union
select col1, col2, col3, 2 as sortorder from table2
) as d
order by sortorder, col1

这会将第二个 select 语句中的行放在第一个之后,其中它们将按 col1 的顺序排列。

请注意,当您在内部查询之外进行排序时,使用 union 而不是 union all 的唯一原因是如果您想消除重复项。在这种情况下,重复项必须来自两个查询中的任何一个,而不是两个查询共有,因为 sortorder 列使它们在两个查询之间是不同的。所以你可能会想要使用 union all。

【讨论】:

  • 问题是我在 SSIS 上加载此查询,然后作为报告导出到 excel ......所以,我认为新的列值对报告没有任何意义。
  • @pyram 实际上,sortorder 列的值不会出现在输出中,但输出将按 table1 中的 col1 值和 table2 中的 col1 值排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 2016-11-06
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
相关资源
最近更新 更多