sql嵌套的case语句

mat*_*234 10 sql oracle case

有没有人知道这个嵌套的select语句有什么问题?它抱怨失踪)但我无法理解为什么它不起作用(我已经把声明的其他部分留下了)

Select
(CASE WHEN REQUESTS.grade_id = 1 THEN
      (CASE WHEN  ((date_completed-date_submitted)*24*60)<=30 THEN 'Yes'
           ELSE 'No'
      END)
 ELSE CASE WHEN REQUESTS.grade_id = 2 THEN
      (CASE ((date_completed-date_submitted)*24*60) <=120 THEN 'Yes'
           ELSE 'No'
      END) 
 ELSE CASE WHEN REQUESTS.grade_id = 3 THEN
     (CASE ((date_completed-date_submitted)*24*60)<=14400 THEN 'Yes'
          ELSE 'No'
     END)
 END)in_SLA
Run Code Online (Sandbox Code Playgroud)

如果我这样做

    Select
       (CASE WHEN REQUESTS.grade_id = 1 THEN
           (CASE WHEN  ((date_completed-date_submitted)*24*60)<=30 THEN 'Yes'
               ELSE 'No'
            END)
       END) in_sla
Run Code Online (Sandbox Code Playgroud)

它工作正常!

任何帮助深表感谢

中号

对不起,我错过了嵌套案件中的呐喊

Ton*_*ews 21

它应该是:

Select
(CASE WHEN REQUESTS.grade_id = 1 THEN
      (CASE WHEN  ((date_completed-date_submitted)*24*60)<=30 THEN 'Yes'
           ELSE 'No'
      END)
      WHEN REQUESTS.grade_id = 2 THEN
      (CASE ((date_completed-date_submitted)*24*60) <=120 THEN 'Yes'
           ELSE 'No'
      END) 
      WHEN REQUESTS.grade_id = 3 THEN
     (CASE ((date_completed-date_submitted)*24*60)<=14400 THEN 'Yes'
          ELSE 'No'
     END)
 END)in_SLA
Run Code Online (Sandbox Code Playgroud)

即每个案件只是"何时"而不是"ELSE CASE WHEN".

我很想简化到:

Select
CASE WHEN (REQUESTS.grade_id = 1 AND (date_completed-date_submitted)*24*60 <= 30)
       OR (REQUESTS.grade_id = 2 AND (date_completed-date_submitted)*24*60 <=120)
       OR (REQUESTS.grade_id = 3 AND (date_completed-date_submitted)*24*60 <=14400)
     THEN 'Yes'
     ELSE 'No'
 END in_SLA
Run Code Online (Sandbox Code Playgroud)

  • 甚至更好:`CASE REQUESTS.grade_id WHEN 1那么......当2那么......当3那......结束时 (2认同)
  • 我错过了嵌套案例中的 When !抱歉迟到了! (2认同)