我正在撰写报告,选择一些有关学生的数据,并使用与GPA术语代码相对应的术语代码。
我们的条款代码的工作方式如下:201410是2014年春季,2014年夏季是2014年夏季。我需要看看他们之前的学期GPA(因为本学期尚未完成)我正在写一个案例陈述来表示这一点,但我没有太多运气。
如果学期代码是10个学期,我想选择上一个秋季学期等。任何帮助或提示将不胜感激。
and TERM_CODE = :parm_DD_TermCode.TERM_CODE
and (CASE
WHEN TERM_CODE LIKE '%%%%80'
THEN GPA_TERM_CODE = (SUBSTR(:parm_DD_TermCode.TERM_CODE,1,4)||'50')
WHEN TERM_CODE LIKE '%%%%50'
THEN GPA_TERM_CODE = (SUBSTR(:parm_DD_TermCode.TERM_CODE,1,4)||'10')
WHEN TERM_CODE LIKE '%%%%10'
THEN GPA_TERM_CODE = (SUBSTR(:parm_DD_TermCode.TERM_CODE,1,4)-1||'80')
END)
答案 0 :(得分:2)
据我所知,Oracle SQL中没有布尔类型,因此您不能将CASE
表达式计算为布尔值。幸运的是,在您的特定情况下,您不需要它:
and TERM_CODE = :parm_DD_TermCode.TERM_CODE
and GPA_TERM_CODE = CASE
WHEN TERM_CODE LIKE '%80'
THEN SUBSTR(:parm_DD_TermCode.TERM_CODE, 1, 4) || '50'
WHEN TERM_CODE LIKE '%50'
THEN SUBSTR(:parm_DD_TermCode.TERM_CODE, 1, 4) || '10'
WHEN TERM_CODE LIKE '%10'
THEN to_char(to_number(SUBSTR(:parm_DD_TermCode.TERM_CODE, 1, 4)) - 1) || '80'
END
正如您所看到的,我还添加了一些显式类型转换:信任SQL隐式转换是特别糟糕的IDEA 。上面的代码假设TERM_CODE
和GPA_TERM_CODE
是字符串。