今天一位朋友问这样个问题:
Case when语句:
SELECT sum (CASE WHEN T > 24 THEN 1 ELSE 0 END), sum (CASE WHEN T<=24 THEN 1 ELSE 0 END) FROM gzb ;如果用decode如何实现如上效果

解决方案 »

  1.   

    -- decode()只能用在具体值有用,
    -- 除非在你的业务中,能够(且乐意)将某字段范围值具体化,
    -- 或则在case ... when 语句中存在区间条件时,decode()函数是无能为力的!
      

  2.   

    -- 例如:你上的的语句,如果T字段,只可能存在整数(没有小数),你可以这样写:
    select sum(deocde(t,1,0,
                        2,0,
                        3,0,
                        ...,...
                        24,0,
                           1),
          sum(deocde(t,1,1,
                        2,1,
                        3,1,
                        ...,...
                        24,1,
                           0)
    FROM gzb;
      

  3.   

    1.这里发言,表示您接受了CSDN社区的用户行为准则。 
    2.请对您的言行负责,并遵守中华人民共和国有关法律法规,尊重网上道德。 
    3.转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。 
     
      

  4.   

    decode  +  sign 可以实现
      

  5.   

    可以实现:
    select sum(decode(sign(T - 24),-1,1,0)) + sum(decode(sign(T - 24),0,1,0)),sum(decode(sign(T - 24),1,1,0)) 
    from gzb
    或者
    select SUM(DECODE((T-24) - ABS(T-24),0,1,0)) - SUM(DECODE(T,24,1,0)),SUM(DECODE((T-24) - ABS(T-24),0,0,1))+SUM(DECODE(T,24,1,0))
    from gzb