我有一个查询来获取和计算相应的值。要获取我在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');但它给了我的记录,如每盒,每个托盘,然后每个设备的数据。它的顺序与从句中的顺序不同。在Oracle中,是否有任何方法可以获得与in子句相同顺序的记录。
桑杰萨
发布于 2018-12-07 18:28:49
当然;应用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)发布于 2018-12-07 18:32:05
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;https://stackoverflow.com/questions/53671379
复制相似问题