【问题标题】:Show each table after the other in UNION SQL在 UNION SQL 中依次显示每个表
【发布时间】:2022-11-10 00:31:54
【问题描述】:

我想在一个结果集中显示两个结果集,使用UNION

问题是,我希望它显示第一个表的所有记录,并且然后去下一个

但由于 SQL Server 自动按第一列对结果进行排序,因此最终结果按 ID 列排序,这两个表都有

两个表都有一列ID 为 1、2、3 等,因此UNION 的结果如下所示:

[table 1].[record 1]
[table 2].[record 1]
[table 1].[record 2]
[table 2].[record 2]

我希望它显示如下:

[table 1].[record 1]
[table 1].[record 2]
[table 1].[record 3]
[table 2].[record 1]
[table 2].[record 2]
[table 2].[record 3]

【问题讨论】:

  • “因为 SQL Server 自动按第一列对结果进行排序”不,它不会(不能保证顺序),除非您添加 ORDER BY。可能发生的情况是您拥有UNION 而不是UNION ALL,在这种情况下,它需要对数据进行重复数据删除,因此它对其进行排序以执行此操作。

标签: sql-server tsql


【解决方案1】:

添加“排序列”,例如

select 0 Orderb, T1.*
from Table1 T1

union all

select 1 Orderb, T2.*
from Table2 T2

order by OrderBy, id; -- whatever columns you wish to order by

【讨论】:

  • 请注意,按OrderBy 排序仅表示实际上没有排序,只是Merge Concatenation
  • Tnx Dale 还有,有没有办法隐藏这个专栏?我没有找到任何可以帮助隐藏查询输出中的列
  • @Mohammad 只使用子查询。
  • @Charlieface 是的,但这实际上是我不希望两个不同表的记录之间有任何排序的一点。仅在每个表的记录中(默认情况下在每个表的第一列完成)
  • @DaleK Tnx 很多 <3。所以要明确一点,没有办法Hide 一栏,对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
相关资源
最近更新 更多