当我发现
我正在尝试按两个列(很容易)对表进行排序,但按特定顺序获取输出(很容易),并且使一列的一个特定值出现在最后(完成了...但很丑)。
假设这些列是
以我通常的混乱方式,我只是强制将
NULLS LAST
时,我有点希望它可以推广到查询的ORDER BY
部分中CASE
语句的“X LAST”。
看起来似乎不行。我正在尝试按两个列(很容易)对表进行排序,但按特定顺序获取输出(很容易),并且使一列的一个特定值出现在最后(完成了...但很丑)。
假设这些列是
zone
和status
(别怪我给列命名为zone
- 我没有命名)。 status
只有2个值('U'和'S'),而zone
可以取大约100个值中的任意一个。
zone
值的一个子集是(伪正则表达式)IN[0-7]Z
,它们在结果中首先出现。使用CASE
很容易实现。
zone
还可以取值“Future”,该值应出现在结果的最后。以我通常的混乱方式,我只是强制将
CASE
值设置为1000,如下所示:group by zone, status
order by (
case when zone='IN1Z' then 1
when zone='IN2Z' then 2
when zone='IN3Z' then 3
.
. -- other IN[X]Z etc
.
when zone = 'Future' then 1000
else 11 -- [number of defined cases +1]
end), zone, status
这样做虽然可行,但显然是一种折衷方法,我想知道是否有一行代码可以实现相同的效果。
有没有更简洁的方法来达到同样的结果?
\d tbl
可以获取),这将显示我们精确的数据类型和 NOT NULL 约束。 - Erwin Brandstetter