一个表,有3列id,date,Y/N,其中Y/N用1或0表示是否出勤,请写出按10月份出勤次数降序排列结果的sql语句。

解决方案 »

  1.   

    是要这个?
    select id
          ,sum(case when YN = 1 then 1 else 0 end) x
      from T
     where dt between date '2008-10-01' and date '2008-10-31'
     group by id
     order by 2;
      

  2.   

    这个题目只比入门级难一点而已
    楼上的关于日期有错误
    dt between date '2008-10-01' and date '2008-10-31'
    oracle没这样的写法的
    另外不需要CASE WHEN,直接SUM不就行了 
      

  3.   

    不难,这是靠你对ORACLE函数基本功的题。
      

  4.   


    select id,sum(Y/N)  kqcount from 表
    group by id 
    order by sum(Y/N) desc;
      

  5.   

    select id,to_char(date,'yyyymm'),sum(decode(y/n,1,1)) from 表 where to_char(date,'yyyymm')='200810' group by to_char(date,'yyyymm') order by  sum(decode(y/n,1,1)) desc
      

  6.   


    呵呵,有date '2008-10-01'这种写法的。因为里面存的是1、0, 昨天没考虑到,看来是可以直接sum
      

  7.   

    select id,to_char(date,'yyyymm'),sum(decode(y/n,1,1)) 
    from 表 
    where to_char(date,'yyyymm')='200810' 
    group by to_char(date,'yyyymm') 
    order by 3 desc
      

  8.   

    select id, sum(yn) su
      from T
     where d between to_date('2008-10-01', 'yyyy-mm-dd') and
           to_date('2008-10-31', 'yyyy-mm-dd')
     group by id
     order by su
      

  9.   


    --MS_sqL
    select  id , sum(y/n) from tb where  group by id  having convert(char(7),date,120)='2008-10'
     order by  sum[y/n] desc 
    --oracle
    select id,to_char(date,'yyyymm'),sum(decode(y/n,1,1)) from tb
     where to_char(date,'yyyymm')='200810' group by id order by  sum(decode(y/n,1,1)) desc