我需要帮助编写 select 子句查询。
例如,假设我有这样的查询:
select value from some_table order by value asc;
因此我得到了这个:
1
2
3
4
5
6
7
8
9
10
但是我要写的一个特殊查询,仍然会给我排序的值,但会在 8 之后放置 5
这意味着我需要一个值超出常规顺序。
可以用其他方式描述。假设我有两组数字(例子): A = {a | 1< = a< = 118,a!= 78} B = {b | b> 118} 我有一组C = A U B U {78} 我需要将所有这些值排序为“A,78,B”
答案 0 :(得分:9)
假设值是整数,您可以这样做:
SELECT *
FROM tbl
ORDER BY
CASE
WHEN value = 5 THEN 8.5
ELSE value
END
答案 1 :(得分:2)
您可以通过以下方式在订单中使用多个条件:
ORDER BY (value BETWEEN 1 AND 118) AND value != 78 DESC,
value > 118 DESC,
value
这将确保首先匹配第一个谓词的值,然后匹配第二个谓词的值,最后匹配任何谓词的值。如果存在平局(两个数字匹配相同的谓词),则这些数字按升序排序。
请注意,我没有在Oracle中对此进行过测试。可能需要将谓词包装在CASE表达式(CASE WHEN predicate THEN 1 ELSE 0 END)
中,以使排序在Oracle中有效。
ORDER BY
(CASE WHEN ((value BETWEEN 1 AND 118) AND value <> 78) THEN 1 ELSE 0 END) DESC,
(CASE WHEN (value > 118) THEN 1 ELSE 0 END) DESC,
value
答案 2 :(得分:2)
或者扩展DCP的答案......
SELECT *
FROM tbl
ORDER BY
CASE
WHEN (Condition for first grouping) THEN 1
WHEN (Condition for second grouping) THEN 2
WHEN (Condition for third grouping) THEN 3
ELSE 4
END
答案 3 :(得分:0)
由某些CASE-expression订购以重新映射您的值。