Select case when sznl between 1 and 20 then ‘20岁及以下’,
            When sznl between 21 and 30 then ‘21岁-30岁’,
            When sznl between 31 and 40 then ‘31岁-40岁’,
            When sznl between 41 and 50 then ‘41岁-50岁’,
            When sznl between 51 and 60 then ‘51岁-60岁’,
            When sznl between 61 and 70 then ‘61岁-70岁’,
            When sznl between 71 and 80 then ‘71岁-80岁’,
            When sznl between 81 and 90 then ‘81岁-90岁’,
            When sznl between 91 and 100 then ‘91岁-100岁’,
            When sznl between 101 and 120 then ‘101岁-120岁’ 
        End 
        as sznl,
   count(discinct aac001) as rs,
   count(aac001) as rc 
from k_crydj 
   group by 
      case when sznl between 1 and 20 then ‘20岁及以下’,
           When sznl between 21 and 30 then ‘21岁-30岁’,
           When sznl between 31 and 40 then ‘31岁-40岁’,
           When sznl between 41 and 50 then ‘41岁-50岁’,
           When sznl between 51 and 60 then ‘51岁-60岁’,
           When sznl between 61 and 70 then ‘61岁-70岁’,
           When sznl between 71 and 80 then ‘71岁-80岁’,
           When sznl between 81 and 90 then ‘81岁-90岁’,
           When sznl between 91 and 100 then ‘91岁-100岁’,
           When sznl between 101 and 120 then ‘101岁-120岁’ 
   End 
 
以上case when语句对吗?若对请给出理由,若错也请给出理由,能举个例子最好!

解决方案 »

  1.   

    "‘"需要改为"'",也就是全角的单引号需要改为半角的。逻辑上好像少了大于120的处理,最好case中加上else。
      

  2.   

    照格式改一下吧~~ 记得把','去掉 select 
            case when tt.b between 1 and 10 then '小于10'
                 when tt.b between 10 and 20 then '大于10小于20'
                 when tt.b between 20 and 30 then '大于20小于30'
                 when tt.b between 30 and 40 then '大于30小于40'
            end as dfdsgg
       from (
            select 1 as ID,'Y' as a,21 as b from dual union all
            select 2 as ID,'Y' as a,10 as b from dual union all
            select 2 as ID,'' as a,5 as b from dual union all
            select 3 as ID,'Y' as a,35 as b from dual
           )tt
      group by (case when tt.b between 1 and 10 then '小于10'
                 when tt.b between 10 and 20 then '大于10小于20'
                 when tt.b between 20 and 30 then '大于20小于30'
                 when tt.b between 30 and 40 then '大于30小于40'        
                end);