我正在尝试实现3级嵌套排序。基本上我有四列:
A | B | C | D
--- | --- | --- | ---
bob | GOOD| 1 |
kat | BAD | | 24
bob | OK | | 15
bob | GOOD| 20 |
bob | OK | | 10
bob | OK | 5 |
我需要三个级别的排序...第一级列A ASC,第二级是B列的案例排序,第三级我需要根据C& C的值排序D如果B ='GOOD'并且基于C排序,如果B是任何其他值。
我目前拥有的是:
ORDER
BY A,
CASE
WHEN B ='GOOD' THEN 1
WHEN B = 'OK' THEN 2
WHEN B = 'BAD' THEN 3
END, C
然而,这仅根据C的值对第三级进行排序。
答案 0 :(得分:2)
您可以使用另一个案例陈述:
ORDER BY A,
CASE B WHEN 'GOOD' THEN 1
WHEN 'OK' THEN 2
WHEN 'BAD' THEN 3
END,
CASE B WHEN 'GOOD' THEN C ELSE D END
在示例数据中,没有任何行似乎都有C和D的值。如果确实如此,您可以使用coalesce
简化:
ORDER BY A,
CASE B WHEN 'GOOD' THEN 1
WHEN 'OK' THEN 2
WHEN 'BAD' THEN 3
END,
COALESCE(C, D)
答案 1 :(得分:0)
如果我做对了
ORDER BY A,
CASE
WHEN B ='GOOD' THEN 1
WHEN B = 'OK' THEN 2
WHEN B = 'BAD' THEN 3
END, C,
CASE WHEN B ='GOOD' THEN D END