DB2(z/OS)自定义排序需求:CODE为B/C的行优先按TIMESTAMP排序
DB2 for z/OS 特殊排序实现方案
针对你的需求,直接在ORDER BY中结合CASE表达式定义优先级,再配合时间戳排序即可,以下是可直接使用的SQL语句:
SELECT CODE, TIMESTAMP FROM 你的表名 ORDER BY -- 定义优先级:B/C行优先(0),其余行后置(1) CASE WHEN CODE IN ('B', 'C') THEN 0 ELSE 1 END, -- 两组内分别按时间戳排序 TIMESTAMP;
逻辑说明
- 第一个排序条件通过
CASE生成优先级标识:当CODE为B或C时返回0,其他值返回1。因为0的排序权重小于1,所以B/C的行会整体排在结果集最前面。 - 第二个排序条件指定
TIMESTAMP,让B/C组内的行按时间戳排序,剩余组的行也按时间戳排序,完全匹配你给出的示例结果。
如果需要按时间戳倒序展示,只需在TIMESTAMP后添加DESC即可:
SELECT CODE, TIMESTAMP FROM 你的表名 ORDER BY CASE WHEN CODE IN ('B', 'C') THEN 0 ELSE 1 END, TIMESTAMP DESC;
你之前尝试用CASE未成功,大概率是没有将时间戳作为第二个排序条件,或者CASE的条件判断逻辑有误,按上述写法即可解决问题。
内容的提问来源于stack exchange,提问作者Curt Gilker
相关产品推荐
相关产品推荐

