任务:数据库中有一些表MyTable。MyTable 中符合条件 a 的所有行形成行集合 A,所有符合条件 b 的行形成行集合 B。编写一个返回集合 A 和 B 的并集的查询,行按以下顺序显示:
- 首先,所有行仅匹配条件 a。
- 然后所有符合条件 a 和条件 b 的行。
- 最后,所有行仅匹配条件 b。标准 a 和 b 不是预先定义的,而是动态形成的。
这不起作用:
- 起初我想通过 OR 运算符将两个条件 a 和 b 结合起来,但是排序出现了问题。我想象如何按一个字段或多个字段参与的表达式对行进行排序。但是如何根据上面描述的标准来表达排序 - 我什至无法想象。
- 试图通过三个相应的请求来实现所描述的行为。但这种方法并不有效,尤其是在标准数量超过两个的情况下。
好吧,如果在一般情况下,那么这样的事情......
{criteria N code} AS criteria_N生成适当数量的值为 0/1 的列,具体取决于此条目的标准的满足情况。建议注意不要在这些字段中接收 NULL。我们根据我们的品味和给定的任务形成标准的数量,并相应地形成 ORDER BY 中的选项。有时您还可以使用算术表达式(例如,对于所描述的情况,类似ORDER BY criteria_1 - criteria_2 DESC)是非常合适的。如果查询不允许在 HAVING 中使用条件(比如说,它需要分组),或者如果输出集中的条件值无效,那么在子查询中我们形成条件值,在外部查询中我们在 WHERE 中执行选择,然后 (group and) 形成所需的排序表达式。