【问题标题】:Override alphabetical default ORDER BY with a UNION of 2+ tables?使用 2 个以上表的 UNION 覆盖按字母顺序排列的默认 ORDER BY?
【发布时间】:2011-08-19 16:14:28
【问题描述】:

非常快速的问题...我有 4 个表格,它们是 UNION-ed 在一起的,如下所示:

SELECT * FROM table1  
UNION
SELECT * FROM table2  
UNION
SELECT * FROM table3  
UNION
SELECT * FROM table4

如果不指定ORDER BY,则查询按字母升序排列第一列(在我的例子中恰好是varchar 类型)。我也不想要ORDER BY [Column1] DESC。

我只想按照表格本身的顺序对结果进行排序UNION-ed。 1、2、3、4。

有没有简单的方法来做到这一点?

谢谢!!

【问题讨论】:

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


    【解决方案1】:

    一种方式

    SELECT *,1 as SortOrder FROM table1  
    UNION
    SELECT *,2 FROM table2  
    UNION
    SELECT *,3 FROM table3  
    UNION
    SELECT *,4 FROM table4
    order by SortOrder 
    

    发生的情况是您使用 UNION,然后 sql server 使结果集不同,为了做到这一点,它需要对表进行排序

    UNION ALL 有影响吗?

    【讨论】:

    • 是的!使用UNION ALL 可以解决问题。有人可以确认这是正常的吗?
    • 据我所知,不能保证UNION ALL 必须 这样做。我怀疑即使使用ALL SQLMenace 的技巧也是必需的。
    【解决方案2】:

    我们遇到了类似的问题。我们有一个包含 32 个子集的联合查询。我们使用它来填充电子表格,然后用于构建 PowerPoint 演示文稿。每个查询中的第一个字段是一个文本字段,它是数据点的描述。电子表格要求数据按特定顺序排列。

    我们对其中一个字段做了些微改动:

    Concat('Annual incidence rate- ', Year(start_date))
    

    这导致 SQL 按字母顺序对联合进行排序!我怀疑如果您按照@SQLMenace 的指示订购查询,但稍作修改,它也会起作用。

    SELECT '1', * FROM table1  
    UNION
    SELECT '2', * FROM table2  
    UNION
    SELECT '3', * FROM table3  
    UNION
    SELECT '4', * FROM table4
    

    这可能会减轻外部查询包装。它也可能在没有引号的情况下工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 2020-03-29
      • 2011-09-13
      相关资源
      最近更新 更多