首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

oracle中根据年份统计每月的总数?解决思路

2012-03-09 
oracle中根据年份统计每月的总数???oracle表结构:姓名登记时间登记人张三2011-12-23王武李四2011-12-25刘

oracle中根据年份统计每月的总数???
oracle表结构:
姓名 登记时间 登记人
张三 2011-12-23 王武
李四 2011-12-25 刘敏
周松 2011-11-24 王武
赵思 2011-10-22 王武
赵思 2011-10-01 王武
钱斯 2011-04-06 张松
周松 2011-03-24 王武
钱斯 2011-01-06 张松


要根据年份(如2011)和登记人查出每月登记的总人数
如:
1月份 1(个人)
2月份 0(个人)
3月份 1(个人)
.........
11月份 1(个人)
12月份 2(个人)

语句该怎么写啊???????



 

[解决办法]

SQL code
select rn||'月份' ,count(dat)||'(个人)' from (select rownum rn from dual connect by rownum <=12) t1,(select substr(to_char(登记时间,'YYYYMMDD'),5,2) dat from a)t2where t1.rn=t2.dat(+) group by rn order by rn
[解决办法]
SQL code
WITH T1 AS(    SELECT ADD_MONTHS(DATE'2010-12-01',LEVEL) AS t_date    FROM DUAL CONNECT BY LEVEL <= 12  ),T2 AS(SELECT '张三' 姓名,date'2011-12-23' 时间 , '王武' 登记人 FROM DUAL UNION ALL          SELECT '李四' 姓名,date'2011-12-25' 时间 , '刘敏' 登记人 FROM DUAL UNION ALL          SELECT '周松' 姓名,date'2011-11-24' 时间 , '王武' 登记人 FROM DUAL UNION ALL          SELECT '赵思' 姓名,date'2011-10-22' 时间 , '王武' 登记人 FROM DUAL UNION ALL          SELECT '赵思' 姓名,date'2011-10-01' 时间 , '王武' 登记人 FROM DUAL UNION ALL          SELECT '钱斯' 姓名,date'2011-04-06' 时间 , '张松' 登记人 FROM DUAL UNION ALL          SELECT '周松' 姓名,date'2011-03-24' 时间 , '王武' 登记人 FROM DUAL UNION ALL          SELECT '钱斯' 姓名,date'2011-01-06' 时间 , '张松' 登记人 FROM DUAL  )SELECT TO_CHAR(T1.t_date,'YYYY-MM') 月份,NVL(count(T2.时间),0)||'(个人)' 总人数     FROM T1 LEFT JOIN T2 ON TO_CHAR(T1.t_date,'YYYY-MM') = TO_CHAR(T2.时间,'YYYY-MM')    GROUP BY TO_CHAR(T1.t_date,'YYYY-MM')    ORDER BY TO_CHAR(T1.t_date,'YYYY-MM')-------------------------------------------------          月份  总人数1    2011-01    1(个人)2    2011-02    0(个人)3    2011-03    1(个人)4    2011-04    1(个人)5    2011-05    0(个人)6    2011-06    0(个人)7    2011-07    0(个人)8    2011-08    0(个人)9    2011-09    0(个人)10    2011-10    2(个人)11    2011-11    1(个人)12    2011-12    2(个人) 

热点排行