如果发布的值为0,则根据以下列进行排序:isl_tar
,isl_saat
,ref_kod
,isl_ref
,kayit_no
发布值(如果为1,则根据此列进行排序):tutar
此脚本不起作用:
我想按第二种情况排序
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
答案 0 :(得分:1)
我假设CASE
被放置在某个位置之后的值,也许是由某个触发该语句的应用程序引起的。
然后,您可以订购五个CASE
。
如果值为0
,则在0
的情况下,从要排序的列列表中返回相应的列。
如果值是CASE
,则在第一个tutar
中返回1
。在所有其他CASE
中,如果值为1
,则始终返回相同的值或根本不返回任何值(NULL
),如果没有WHEN
完全在那里。
ORDER BY CASE ?
WHEN 0 THEN
ISL_TAR
WHEN 1 THEN
TUTAR
END ASC,
CASE ?
WHEN 0 THEN
ISL_SAAT
END ASC,
CASE ?
WHEN 0 THEN
REF_KOD
END ASC,
CASE ?
WHEN 0 THEN
ISL_REF
END ASC,
CASE ?
WHEN 0 THEN
KAYIT_NO
END ASC
?
必须替换为0
或1
。
但是,如果有一个将值放在CASE
之后的应用程序,则可能是一种“更干净”(更易于阅读,理解和维护)的方式,可以使它更改完整的ORDER BY
表达式而不是放置0
或1
。
答案 1 :(得分:1)
您似乎想要:
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
我认为isl_tar
上的表达式是正确的。似乎只需一个简单的列引用就足够了。