堆栈查询结果在一个查询结果中,因此行的顺序取决于哪个部分 returns 哪个结果

Stack query results in one query result so the order of rows depends on which part returns which result

我想知道的是,您是否可以接受两个查询并将它们有序地表示在一个结果集中。

因此在示例中我们进行两个查询:

Select a.col1, a.col2 from a where a.col3 = 1 Order By a.col2

Select a.col1, a.col2 from a where a.col4 = 0 Order By a col2

我知道在这种情况下很容易将两个查询合并为一个:

Select a.col1, a.col2
from a
where a.col3 = 1 and a.col4 = 0 Order By a col2

但是结果行的顺序现在将在第一次和第二次查询之间混合。

而我正在寻找一种顺序,首先获得所有第一个查询结果,然后获得所有第二个查询结果

我还看到您可以通过按 col3 和 col4 排序轻松解决此示例。但我希望你明白这不是许多其他给定条件的解决方案。

也许没有通用的方法,但我不知道可以使用的所有功能,而且我在编写查询命令方面也不是很先进

谢谢。

您有 2 个选择:

  1. 使用 CASE expression 按过滤条件排序 - 这在表格相同且条件简单的情况下有效。
select a.col1, a.col2
from a
where a.col3 = 1 or a.col4 = 0
order by
  case when a.col3 = 1 then 1 else 0 end desc
  , a.col2;

正如 dogyog 所指出的,这个 where 子句应该使用 OR 而不是 AND 来组合这两个查询。

  1. 使用UNION ALL
select a.col1, a.col2, 0 QueryNum
from a
where a.col3 = 1

union all

select a.col1, a.col2, 1 QueryNum
from a
where a.col4 = 0

order by QueryNum asc, a.col2;