我有个表叫dutycount
字段有:卡号,刷卡日期,姓名,上班状态
=====
我想统计每个月,姓名为“apple”,上班状态为“正常”的次数,统计的sql能显示成下表这样的结构: 
卡号        刷卡日期                 姓名   上班状态
-----   -----------------------  -----   ---
200802 2008-11-18 13:41:23.000 apple 正常
200801 2008-11-18 13:41:30.000 啊清 正常
200803 2008-11-18 13:41:39.000 kevlin 正常
200804 2008-11-18 13:41:45.000 owen 正常
200802 2008-11-18 13:41:51.000 apple 無效
200804 2008-11-18 21:46:07.000 owen 加班
200801 2008-11-18 22:48:15.000 啊清 加班
200802 2008-11-18 22:48:21.000 apple 加班
=================
结果
表的结构:月份      姓名    正常上班次数
=================
我散分了。
谢谢各位帮忙。

解决方案 »

  1.   

    select convert(varchar(7),pdate,120) mon,name,count(*) cnt from dutycount
    group by convert(varchar(7),pdate,120),name
      

  2.   

    SELECT CONVERT(VARCHAR(7), 刷卡日期, 20) 月份, 姓名, COUNT(*) 正常上班次数
    FROM dutycount
    WHERE 上班状态='正常'
    GROUP BY CONVERT(VARCHAR(7), 刷卡日期, 20), 姓名
    HAVING 姓名='apple'
      

  3.   

    我写个ORACLE数据库的好了select to_char(刷卡日期,'yyyy-mm') as 月份,姓名,sum(case 上班状态='正常' then 1 else 0 end case ) as 正常上班次数
    where 姓名='apple'
    group by to_char(刷卡日期,'yyyy-mm'),姓名
      

  4.   


    select to_char(刷卡日期,'yyyy-mm') as 月份,姓名,sum(case when 上班状态='正常' then 1 else 0 end case ) as 正常上班次数
    where 姓名='apple'
    group by to_char(刷卡日期,'yyyy-mm'),姓名
      

  5.   

    我根据3楼的高手sql
    现在我统计出结果如下:
    =======================
    name   count    date
    ----   --       ------     
    apple 1 2008-11
    apple 1 2008-12
    apple 1 2008-01
    ==============
    我想apple这个是相同的就只显示一个apple
    不用这么多apple。
      

  6.   

    你自己的需求就是这么要求的啊!我想统计每个月,姓名为“apple”,上班状态为“正常”的次数,统计的sql能显示成下表这样的结构: