【问题标题】:Select values from database based on the same order of values in IN Clause -Oracle根据 IN 子句 -Oracle 中相同的值顺序从数据库中选择值
【发布时间】:2018-12-07 14:18:43
【问题描述】:

我有一个查询来获取并相应地计算值。要获取我在 IN 子句中传递值的值,如下所示,

SELECT *
FROM SQ_HANDLING_TIME_T
WHERE QSC_CODE   = '001'
AND BU_TYPE_RULE = 'STO'
AND DEV_TYPE     = 'NC'
AND FIELD_NAME IN('NC_LQ2_PER_PALLET','NC_LQ2_PER_BOX','NC_LQ2_PER_APPLIANCES');

但它给我的记录是 perbox、perpallet 和 per Appliance 数据。 它的顺序与 In 子句中的顺序不同。 在 Oracle 中有什么方法可以让我以与 In 子句中相同的顺序获取记录。

问候 桑吉萨

【问题讨论】:

标签: oracle


【解决方案1】:

当然;应用 ORDER BY 子句,它关心 WHERE 子句中的顺序。下面是一个基于 Scott 架构的示例:

SQL> select deptno, ename, job, sal
  2  from emp
  3  where job in ('MANAGER', 'CLERK', 'SALESMAN')
  4  order by decode(job, 'MANAGER', 1, 'CLERK', 2, 'SALESMAN', 3);

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        10 CLARK      MANAGER         2450
        20 JONES      MANAGER         2975
        30 BLAKE      MANAGER         2850
        30 JAMES      CLERK            950
        20 SMITH      CLERK            800
        10 MILLER     CLERK           1300
        30 TURNER     SALESMAN        1500
        30 WARD       SALESMAN        1250
        30 ALLEN      SALESMAN        1600
        30 MARTIN     SALESMAN        1250

10 rows selected.

SQL>

在你的情况下,那将是

...
ORDER BY DECODE(field_name, 'NC_LQ2_PER_PALLET', 1,
                            'NC_LQ2_PER_BOX', 2,
                            'NC_LQ2_PER_APPLIANCES', 3)

【讨论】:

    【解决方案2】:
    SELECT *
    FROM SQ_HANDLING_TIME_T
    WHERE QSC_CODE     = '001'
      AND BU_TYPE_RULE = 'STO'
      AND DEV_TYPE     = 'NC'
      AND FIELD_NAME IN ('NC_LQ2_PER_PALLET','NC_LQ2_PER_BOX', 
                         'NC_LQ2_PER_APPLIANCES');
    ORDER BY
        CASE FIELD_NAME
            WHEN 'NC_LQ2_PER_PALLET'     THEN 1
            WHEN 'NC_LQ2_PER_BOX'        THEN 2
            WHEN 'NC_LQ2_PER_APPLIANCES' THEN 3
        END;
    

    【讨论】:

    • Littlefoots 的回答很好。它也可以作为案例而不是解码来完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 2018-09-08
    • 2016-04-26
    相关资源
    最近更新 更多