You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SQL查询结果按IN子句指定顺序返回而非默认ID排序?

按IN子句指定顺序排序查询结果

你需要让查询结果严格遵循IN子句中IDPEDV的指定顺序返回,默认排序逻辑(通常基于主键或索引)无法满足该需求,以下是针对主流数据库的实现方案:

MySQL/MariaDB

使用FIELD()函数,它会返回目标值在参数列表中的位置,以此作为排序依据:

select CODART as 'MODELO / REF', DESCLIN as DESCRIPCION, UNIDADES as CANTIDAD 
from LINEPEDI 
where IDPEDV in ('69782','69780','68931','69781')
order by FIELD(IDPEDV, '69782','69780','68931','69781');

SQL Server

方案1:CASE语句(兼容全版本)

通过CASE为每个指定ID分配排序权重:

select CODART as 'MODELO / REF', DESCLIN as DESCRIPCION, UNIDADES as CANTIDAD 
from LINEPEDI 
where IDPEDV in ('69782','69780','68931','69781')
order by 
    CASE IDPEDV
        WHEN '69782' THEN 1
        WHEN '69780' THEN 2
        WHEN '68931' THEN 3
        WHEN '69781' THEN 4
    END;

方案2:STRING_SPLIT(2016及以上版本)

借助STRING_SPLIT的序号字段实现排序:

SELECT l.CODART as 'MODELO / REF', l.DESCLIN as DESCRIPCION, l.UNIDADES as CANTIDAD
FROM LINEPEDI l
JOIN STRING_SPLIT('69782,69780,68931,69781', ',') s ON l.IDPEDV = s.value
ORDER BY s.ordinal;

PostgreSQL

利用array_position()函数,将目标ID转为数组后获取位置排序:

select CODART as "MODELO / REF", DESCLIN as DESCRIPCION, UNIDADES as CANTIDAD 
from LINEPEDI 
where IDPEDV in ('69782','69780','68931','69781')
order by array_position(array['69782','69780','68931','69781'], IDPEDV);

Oracle

方案1:CASE语句

和SQL Server逻辑一致,通过自定义权重排序:

select CODART as "MODELO / REF", DESCLIN as DESCRIPCION, UNIDADES as CANTIDAD 
from LINEPEDI 
where IDPEDV in ('69782','69780','68931','69781')
order by 
    CASE IDPEDV
        WHEN '69782' THEN 1
        WHEN '69780' THEN 2
        WHEN '68931' THEN 3
        WHEN '69781' THEN 4
    END;

方案2:INSTR函数

通过匹配字符串中ID的位置实现排序:

select CODART as "MODELO / REF", DESCLIN as DESCRIPCION, UNIDADES as CANTIDAD 
from LINEPEDI 
where IDPEDV in ('69782','69780','68931','69781')
order by INSTR('69782,69780,68931,69781', IDPEDV);

内容的提问来源于stack exchange,提问作者Raul Villamayor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:20:28