日期:2014-05-17 浏览次数:20744 次
select 部门 ,工号 ,姓名 ,日期 , replace(wm_concat(时间),',',' '), count(时间) from tb group by 部门 ,工号 ,姓名 ,日期
------解决方案--------------------
SELECT 部门, 工号, 姓名, 日期, MIN(时间), COUNT(1) FROM TAB GROUP BY 部门, 工号, 姓名, 日期
------解决方案--------------------
select 部门 ,工号 ,姓名 ,日期 ,
replace(wm_concat(时间),',',' '),
count(时间)
from tb group by 部门 ,工号 ,姓名 ,日期
------解决方案--------------------
先创建一个嵌套表,把嵌套表作为另一个新表的列。然后,用以上的记录对这个表自动进行填充,把相同的日期作为一列,不同一时间作为嵌套记录。最后对这个表时行查询,用CASE把嵌套的列记录转换为行记录,再加上嵌套表中的记录数。就OK了。
------解决方案--------------------
为什么是这种啊 ……
安全环境监督部 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
------解决方案--------------------
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
------解决方案--------------------
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
------解决方案--------------------
如果想要每天的日期都显示出来 可以用下表来关联你的查询表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.日期