首页 > 解决方案 > 具有多列顺序时的 CASE 表达式

问题描述

投递值如果为 0,则按以下列排序:isl_tar, isl_saat, ref_kod, isl_ref,kayit_no

Posted value 如果为 1,则根据此列进行排序:tutar

plsql表ss

此脚本不起作用:

我想按第二种情况排序

select t.*
  from TEMP_HESAP_HAREKET t

 order by case 1
            when 0 then
             TO_NUMBER(TO_CHAR(ISL_TAR, 'YYYYMMDD') ||
                       SUBSTR(ISL_SAAT, 1, 2) || SUBSTR(ISL_SAAT, 4, 2))
          end asc,
          REF_KOD asc,
          ISL_REF asc,
          KAYIT_NO asc,
          case 1 
            when 1 then
              tutar end

标签: sqloraclecase-when

解决方案


你似乎想要:

 order by (case 1 when 1 then tutar end),  -- handle that case first
           TO_NUMBER(TO_CHAR(ISL_TAR, 'YYYYMMDD') ||
                       SUBSTR(ISL_SAAT, 1, 2) || SUBSTR(ISL_SAAT, 4, 2))
            REF_KOD asc,
            ISL_REF asc,
            KAYIT_NO asc

我认为 on 的表达isl_tar是正确的。似乎一个简单的列引用就足够了。


推荐阅读