现有数据如下:
部门          工号 姓名          日期            时间
安全环境监督部 574 杨业       2011/12/01   07:58
安全环境监督部 574 杨业       2011/12/01   17:31
安全环境监督部 574 杨业       2011/12/02   07:53
安全环境监督部 574 杨业       2011/12/02   07:55
安全环境监督部 574 杨业       2011/12/02   19:47
安全环境监督部 574 杨业       2011/12/04   08:07
安全环境监督部 574 杨业       2011/12/04   17:22希望通过查询得到如下的结果:
部门          工号 姓名          日期            时间                   刷卡次数
安全环境监督部 574 杨业       2011/12/01   07:58  17:31          2
安全环境监督部 574 杨业       2011/12/02   07:53  07:55  19:47 3
安全环境监督部 574 杨业       2011/12/04   08:07  17:22          2其中关键难点在,组合时间数据串和统计当日记录数2项数据上,请高手赐教!

解决方案 »

  1.   

    select 部门 ,工号 ,姓名 ,日期 ,
    replace(wm_concat(时间),',',' '),
    count(时间)
    from tb group by 部门 ,工号 ,姓名 ,日期 
      

  2.   

    SELECT 部门, 工号, 姓名, 日期, MIN(时间), COUNT(1)
      FROM TAB
     GROUP BY 部门, 工号, 姓名, 日期
      

  3.   

    组合时间数据串和统计当日记录数2项数据上,
    select * from
    (select 部门 ,工号 ,姓名 ,日期 ,
    replace(wm_concat(时间),',',' '),
    count(时间) rn
    from tb group by 部门 ,工号 ,姓名 ,日期 )
    where rn>=2
      

  4.   

    select 部门 ,工号 ,姓名 ,日期 ,
    replace(wm_concat(时间),',',' '),
    count(时间)
    from tb group by 部门 ,工号 ,姓名 ,日期
      

  5.   

    SELECT 部门, 工号, 姓名, 日期, MIN(时间), COUNT(1)
      FROM TBL
     GROUP BY 部门, 工号, 姓名, 日期
      

  6.   

    先创建一个嵌套表,把嵌套表作为另一个新表的列。然后,用以上的记录对这个表自动进行填充,把相同的日期作为一列,不同一时间作为嵌套记录。最后对这个表时行查询,用CASE把嵌套的列记录转换为行记录,再加上嵌套表中的记录数。就OK了。
      

  7.   

    有一个环节忘了说,就是在发生日期有间断的,比如实际数据在3号这天没有任何刷卡记录,但是在最终统计的结果集中也要对3号做出体现,像下面这样显示,只不过,刷卡时间都是空白,次数是0。哎,这种sql难度真的很大,不知道有没有解决办法。安全环境监督部 574 杨业 2011/12/01 07:58 17:31 2
    安全环境监督部 574 杨业 2011/12/02 07:53 07:55 19:47 3
    安全环境监督部 574 杨业 2011/12/03             0
    安全环境监督部 574 杨业 2011/12/04 08:07 17:22 2
      

  8.   

    为什么是这种啊 ……
    安全环境监督部 574 杨业 2011/12/03 0
    如果只有红色的这种记录如果时间是date型就没有必要转换了,我这边是字符所以to_date
    with tb as
    (select '安全环境监督部' d , '574' n, '杨业' m , '2011/12/01' r, '07:58' q from dual union all
    select '安全环境监督部', '574', '杨业', '2011/12/01', '17:31' from dual union all
    select '安全环境监督部', '574', '杨业', '2011/12/02', '07:53' from dual union all
    select '安全环境监督部', '574', '杨业', '2011/12/02', '07:55' from dual union all
    select '安全环境监督部', '574', '杨业', '2011/12/02', '19:47' from dual union all
    select '安全环境监督部', '574', '杨业', '2011/12/04', '08:07' from dual union all
    select '安全环境监督部', '574', '杨业', '2011/12/04', '17:22' from dual )
    select '安全环境监督部', '574', '杨业' ,t1.r,t2.jl,nvl(t2.rn,0)from
    (select (to_date((select min(r)from tb),'YYYY/MM/DD')+rownum-1) r 
    from dual connect by rownum<=(select max(to_date(r,'YYYY/MM/DD'))-min(to_date(r,'YYYY/MM/DD'))from tb)+1) t1
    ,(select '安全环境监督部', '574', '杨业' ,r ,replace(wm_concat(q),',',' ') jl,count(q) rn
    from tb group by r )t2 
    where t1.r=t2.r(+) 
    order by t1.r
    你需要的结果已经实现,不会截图^-^……
      

  9.   

    昨天经过xpingping的开导,主体的功能,已经实现,眼下,就是我后面提到的这个间断的日期记录不好补充。
      

  10.   

    如果记录有间隔,可先插入连续的记录,再进行自动填充。还有上面那个转换函数输入错误,是CAST函数,把嵌套表的列转换成行。
      

  11.   

    select t.deptid 部门号,t.empid 员工号,t.empname 姓名,t.riqi 日期,min(t.shijian)||' '||max(t.shijian) 时间,count(*) 次数
    from shuaka t
    group by t.deptid,t.empid,t.empname,t.riqi
      

  12.   


    create table T12 as
    select '安全环境监督部' d , '574' n, '杨业' m , '2011/12/01' r, '07:58' q from dual union all
    select '安全环境监督部', '574', '杨业', '2011/12/01', '17:31' from dual union all
    select '安全环境监督部', '574', '杨业', '2011/12/02', '07:53' from dual union all
    select '安全环境监督部', '574', '杨业', '2011/12/02', '07:55' from dual union all
    select '安全环境监督部', '574', '杨业', '2011/12/02', '19:47' from dual union all
    select '安全环境监督部', '574', '杨业', '2011/12/04', '08:07' from dual union all
    select '安全环境监督部', '574', '杨业', '2011/12/04', '17:22' from dual;select d ,n ,m ,r ,
    replace(wm_concat(q),',',' '),
    count(q)
    from t12 group by  d ,n ,m ,r
      

  13.   

    如果想要每天的日期都显示出来 可以用下表来关联你的查询表a
    select b.sdate ,a.* from
    (select to_char(to_date('2011-12', 'YYYY-MM') + rownum - 1, 'YYYY-MM-DD') as sdate from dual
           connect by rownum <= to_number(to_char(last_day(to_date('2011-12', 'YYYY-MM')), 'dd'))) b
    left jion b.sdate=a.日期  
      

  14.   

    select 
        部门,工号,姓名,时间,wm_concat(日期) 
    from table t 
    group by 部门,工号,姓名,时间