WITH AB_results AS(
SELECT class, rank, 1 AS hidden_rank
FROM my_relation
WHERE class IN ('A','B')
),
Non_AB_results AS(
SELECT class, rank, 2 AS hidden_rank
FROM my_relation
WHERE class NOT IN ('A','B')
)
SELECT COALESCE(AB_results.class,Non_AB_results.class), rank
FROM AB_results
FULL OUTER JOIN Non_AB_results
USING(hidden_rank,rank)
ORDER BY hidden_rank, rank;
您只需要
CASE
在 , 中使用一个表达式ORDER BY
将行分成两组,因此具有类“A”或“B”的那些放在第一组 (1
) 中,所有其他放在第二组 (2
) 中:我将为您提供一个方法示例,其中我使用 CTE,它在许多数据库中都可用,尤其是我最熟悉的 PostgreSQL。
CTE 和
WITH
条款CTE允许您形成类似结构的临时、单一查询表,但由于您可以使 CTE 在单个查询中彼此依赖,它提供了一种方便且易于理解的方式来使您的查询半过程化。
在你的情况下,我会尝试
我将尝试在几分钟内将 SQLFiddle 放在一起,只是为了确保我的某些查询没有出错。:P
编辑:我确实犯了一个小错误。在我们说话的时候试着用一个例子来清理它。
编辑 2:错误现已更正!不幸的是,SQLFiddle 现在有点麻烦,但这里是用于某些测试的 SQLFiddle 的链接。
请注意,我可能没有以最优雅的方式解决这个问题,但它应该可以解决您的问题。