【问题标题】:Order By clause with multiple columns using Case statement使用 Case 语句的具有多列的 Order By 子句
【发布时间】:2021-12-13 01:06:29
【问题描述】:

在下面的查询中,我需要对 sortest_tesc_code 排序顺序进行硬编码,如 order by case 语句所示。这可行,但我还需要第二次排序,以便多个sortest_tesc_code 值将按其sortest_test_date 降序排序。如何添加第二个排序?

SELECT  stvtesc_desc testname,
    nvl(sortest_test_score, '-') testscore,
    nvl(sortest_tesc_code, ' ') placement,
    nvl(SORTEST_TSRC_CODE, ' ') method_cocc,
    nvl(TO_CHAR(sortest_test_date,'DD-MON-YYYY'),' - ') testdate
FROM stvtesc, sortest_add
WHERE (stvtesc_vr_msg_no <> '999' or stvtesc_vr_msg_no is null)
AND   sortest_tesc_code not in ('CASM','CASR','CASW')
AND   sortest_tesc_code = stvtesc_code
AND   sortest_pidm      = testpidm             
ORDER BY
      case 
         when sortest_tesc_code = 'PLM' then 1 
         when sortest_tesc_code = 'PLW' then 2
         when sortest_tesc_code = 'MEX' then 3
         when sortest_tesc_code = 'WEX' then 4
         when sortest_tesc_code = 'BWC' then 5
         when sortest_tesc_code = 'BWX' then 6
         when sortest_tesc_code = 'OOC' then 7
         when sortest_tesc_code = 'HSRT' then 8
         when sortest_tesc_code like 'TE%' then 9
         when sortest_tesc_code = 'COMP' then 10
      end; 

sortest_test_date 的查询结果未按 sortest_tesc_code PLM 的要求排序:

Placement Level Math    015 PLM DSP     14-APR-2018
Placement Level Math    018 PLM ALKS    20-MAY-2020
Placement Level Math    010 PLM DSP     15-MAY-2019
Placement Level Writing 009 PLW DSP     20-MAY-2019

【问题讨论】:

    标签: sql oracle sorting


    【解决方案1】:

    那是因为您没有指示 Oracle 这样做。您仅按sortest_tesc_code 排序,而缺少sortest_test_date,即

    ORDER BY
      case 
         when sortest_tesc_code = 'PLM' then 1 
         when sortest_tesc_code = 'PLW' then 2
         when sortest_tesc_code = 'MEX' then 3
         when sortest_tesc_code = 'WEX' then 4
         when sortest_tesc_code = 'BWC' then 5
         when sortest_tesc_code = 'BWX' then 6
         when sortest_tesc_code = 'OOC' then 7
         when sortest_tesc_code = 'HSRT' then 8
         when sortest_tesc_code like 'TE%' then 9
         when sortest_tesc_code = 'COMP' then 10
      end,
      sortest_test_date                            --> this
    ;
    

    【讨论】:

      猜你喜欢
      • 2021-07-20
      • 2014-11-20
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多