一个长的CASE WHEN声明

时间:2013-01-24 19:40:33

标签: sql-server

我有最长的联合案例陈述我曾经做过,我无法解决这个错误。 IT说它附近的语法错误)我完全不好意思,我无法弄清楚这样一个简单的错误

SUM(CASE 
      WHEN COL_V_STD_REP_FullCourseDetail.SYSTEM = 'GEMS' 
      THEN CASE 
             WHEN RRDD LIKE '12%' OR RRDD LIKE '13%' OR RRDD LIKE '16%' OR 
                  RRDD LIKE '17%' OR RRDD LIKE '2706%' OR RRDD LIKE '2707%' OR 
                  RRDD LIKE '2331%' 
             THEN [DUR_IN_Hours] 
             ELSE 0 
             END) AS SP_DOM_INTL_HRS

2 个答案:

答案 0 :(得分:6)

您缺少第二个END

SUM(CASE 
      WHEN COL_V_STD_REP_FullCourseDetail.SYSTEM = 'GEMS' 
      THEN 
        CASE 
          WHEN RRDD LIKE '12%' 
            OR RRDD LIKE '13%' 
            OR RRDD LIKE '16%' 
            OR RRDD LIKE '17%' 
            OR RRDD LIKE '2706%' 
            OR RRDD LIKE '2707%' 
            OR RRDD LIKE '2331%' 
          THEN [DUR_IN_Hours] 
          ELSE 0 
        END
     END) AS SP_DOM_INTL_HRS
     ^ -- this is missing

作为旁注,如果您格式化代码,您将更容易找到这些问题。

答案 1 :(得分:2)

逻辑上,当逻辑不复杂时,我不会嵌套CASE语句。对于这样的事情,我会在第一个CASE语句中添加嵌套的CASE语句的逻辑(如下所示):

SUM(CASE 
  WHEN COL_V_STD_REP_FullCourseDetail.SYSTEM = 'GEMS' AND 
       (RRDD LIKE '12%' 
        OR RRDD LIKE '13%' 
        OR RRDD LIKE '16%' 
        OR RRDD LIKE '17%' 
        OR RRDD LIKE '2706%' 
        OR RRDD LIKE '2707%' 
        OR RRDD LIKE '2331%') THEN [DUR_IN_Hours] 
  ELSE 0 
END) AS SP_DOM_INTL_HRS