如何调整SQL查询排序,使hierarchy_id为*的记录优先且其余保持原序?
解决rebate_agreement表排序异常的问题
你需要调整ORDER BY子句的逻辑,确保先按hierarchy_id的优先级排序,再对非'*'的记录严格执行agreement_id升序。正确的SQL语句如下:
SELECT * FROM rebate_agreement WHERE Customer_no = 'Kap-ST' ORDER BY -- 将hierarchy_id为'*'的记录排在最前面 CASE WHEN hierarchy_id = '*' THEN 0 ELSE 1 END, -- 非'*'的记录按agreement_id升序排列 agreement_id ASC;
问题原因分析
你之前的写法大概率是没有明确在CASE之后添加agreement_id的升序排序,或者错误地将agreement_id的排序逻辑整合到CASE语句中(比如用CASE返回agreement_id或某个特定值),导致非'*'记录的排序规则被打乱。
上述写法中:
- 用CASE语句将hierarchy_id为''的标记为0,其余标记为1,0的排序优先级高于1,确保''的记录先展示。
- 紧接着指定
agreement_id ASC,保证同一优先级组内的记录严格按agreement_id的升序排列,这样KAPA2会自然排在KAPA3前面,符合你的预期。
内容的提问来源于stack exchange,提问作者Kaumadie Prabashinie
相关产品推荐
相关产品推荐

