2010-07-06 124 views
9

没有人知道这个嵌套select语句有什么问题吗?它抱怨丢失)的,但我不明白为什么它不工作(我都不放过声明的其他位)sql嵌套case语句

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 

如果我只是做

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 

它工作正常!

任何的帮助深表感谢

中号

遗憾是一个TARD我错过从嵌套的情况下,whens

回答

20

它应该是:

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 

即刚好“何时“不是”否则时“。

我会忍不住来简化:

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 
+2

甚至更​​好:'CASE REQUESTS.grade_id 1时THEN ... WHEN 2 THEN ... WHEN 3 THEN ... END' – Guffa 2010-07-06 15:43:36

+0

谢谢但是这也不管用,Else Case当我从我身上弄到一些东西来让它工作的时候。 任何其他的想法? – matt1234 2010-07-06 15:43:42

+1

我错过了从嵌套案件时! 对不起,谢谢! – matt1234 2010-07-06 15:49:08