我正在尝试更新查询,如果st.style_perm_id是两位数则保留原样,如果三位数则显示三位数。
以下是我需要更新的部分
SELECT
st.style_id
, decode(greatest(max(sd.sub_division_perm_id),99)
, 99, to_number(LTRIM(TO_CHAR(max(sd.model_year), '9999'))
|| LTRIM(TO_CHAR(max(sd.sub_division_perm_id), '09'))
|| LTRIM(TO_CHAR(max(ymm.model_perm_id), '09'))
|| LTRIM(TO_CHAR(max(st.style_perm_id), '09')))
, null) hist_style_id
, 'w' || LTRIM(TO_CHAR(max(sd.model_year), '9999'))
|| 'k' || LTRIM(TO_CHAR(max(sd.sub_division_perm_id), '999'))
|| 'm' || LTRIM(TO_CHAR(max(ymm.model_perm_id), '999'))
|| 't' || LTRIM(TO_CHAR(max(st.style_perm_id), '999')) style_token
, max(sd.model_year) model_year
我尝试使用案例
SELECT
st.style_id
, decode(greatest(max(sd.sub_division_perm_id),99)
, 99, to_number(LTRIM(TO_CHAR(max(sd.model_year), '9999'))
|| LTRIM(TO_CHAR(max(sd.sub_division_perm_id), '09'))
|| LTRIM(TO_CHAR(max(ymm.model_perm_id), '09'))
|| LTRIM(TO_CHAR(max(st.style_perm_id), '09'))
|| CASE WHEN st.style_perm_id < 99 THEN LTRIM(TO_CHAR(max(st.style_perm_id), '99'))
WHEN st.style_perm_id < 999 THEN LTRIM(TO_CHAR(max(st.style_perm_id), '999')))
END
我收到如下错误。
ORA-00905:缺少关键字 00905. 00000 - &#34;缺少关键字&#34;
我不确定这是否是正确的做法。
如果st.style_perm_id
是两位数,请如何更新查询,如果三位数则显示三位数。
感谢您的帮助,因为我正在敲打几个小时。
答案 0 :(得分:0)
我不记得上次使用解码时的情况,并且不认为我曾在我的代码中使用过它,但是下面的小测试显示了案例表达和解码您的情况。
with st as (
select 98 as style_perm_id from dual union all
select 798 from dual
)
select
max(st.style_perm_id) MAXVALUE
, CASE WHEN max(st.style_perm_id) < 99 THEN ltrim(to_char(max(st.style_perm_id), '99'))
WHEN max(st.style_perm_id) < 999 THEN ltrim(to_char(max(st.style_perm_id), '999'))
ELSE ' '
END BY_CASE
, DECODE(sign(999-max(st.style_perm_id)), 1,ltrim(to_char(max(st.style_perm_id), '999')),
DECODE(sign(99-max(st.style_perm_id)), 1,ltrim(to_char(max(st.style_perm_id), '99'))),' ') BY_DECODE
from st
I used an asktom discussion协助解码,这是符号(...)的来源