SELECT CASE
         WHEN STATUS_CD_DESC IN ('CLOSED', 'CANCELLED', 'N/A') THEN
          'N'
         ELSE
          CASE
         WHEN ATD_ACPT_DT IS NOT NULL THEN
          'N'
         ELSE
          CASE
         WHEN (REV_REC_TERMS_KEY IN ('SHIPMENT', 'DELIVERY')) AND
              ((FSET_NEOVT <> 0) OR (REV_REC_STEP_DESC IS NOT NULL)) THEN
          'N'
         ELSE
          'Y'
       END END END AS BACKLG_FLG
FROM  ...
WHERE ...
请问高手,最下面一行有3个END,正确吗,我觉得一个END就够了

解决方案 »

  1.   

    这样是一个end
    SELECT CASE
             WHEN STATUS_CD_DESC IN ('CLOSED', 'CANCELLED', 'N/A') THEN
              'N'
             WHEN ATD_ACPT_DT IS NOT NULL THEN
              'N'
             WHEN (REV_REC_TERMS_KEY IN ('SHIPMENT', 'DELIVERY')) AND
                  ((FSET_NEOVT <> 0) OR (REV_REC_STEP_DESC IS NOT NULL)) THEN
              'N'
             ELSE
              'Y'
           END AS BACKLG_FLG
    FROM  ...
    WHERE ...
      

  2.   

    是正确的 一个END就错了
    测试 SQL:
    SELECT CASE
             WHEN 'CLOSED' IN ('CLOSED', 'CANCELLED', 'N/A') THEN
              'N'
             ELSE
              CASE
             WHEN 'sdsd' IS NOT NULL THEN
              'N'
             ELSE
              CASE
             WHEN ('SHIPMENT' IN ('SHIPMENT', 'DELIVERY')) AND
                  ((3 <> 0) OR ('SHIPMENT' IS NOT NULL)) THEN
              'N'
             ELSE
              'Y'
           END END END AS BACKLG_FLG
    FROM  dual
      

  3.   

    调一个格式就看清楚了:SELECT CASE
             WHEN STATUS_CD_DESC IN ('CLOSED', 'CANCELLED', 'N/A') THEN 'N'
           ELSE
               CASE
                 WHEN ATD_ACPT_DT IS NOT NULL THEN 'N'
               ELSE
                 CASE
                    WHEN (REV_REC_TERMS_KEY IN ('SHIPMENT', 'DELIVERY')) AND
                      ((FSET_NEOVT <> 0) OR (REV_REC_STEP_DESC IS NOT NULL)) THEN 'N'
                 ELSE
                    'Y'
                 END 
               END 
           END AS BACKLG_FLG
    FROM  ...
    WHERE ...
      

  4.   

    SELECT CASE
             WHEN 'CLOSED' IN ('CLOSED', 'CANCELLED', 'N/A') THEN
              'N'
             ELSE
              CASE
             WHEN 'sdsd' IS NOT NULL THEN
              'N'
             ELSE
              CASE
             WHEN ('SHIPMENT' IN ('SHIPMENT', 'DELIVERY')) AND
                  ((3 <> 0) OR ('SHIPMENT' IS NOT NULL)) THEN
              'N'
             ELSE
              'Y'
           END END END AS BACKLG_FLG
      FROM DUAL