日期:2014-05-16  浏览次数:20735 次

group by 做报表 出结果就结贴
本帖最后由 lovemy016 于 2012-05-16 17:16:06 编辑
表结构 字段有                   编号, 违规类型,违规时间
怎么样能够统计成 
 &   1月     2月    3月   4月   5月     
违规类型1       10起    9起
违规类型2       11起    6起
违规类型3



------解决方案--------------------

select 违规类型,
       decode(to_char(违规时间,'MM'),'01',count(*)) as '1月',
       decode(to_char(违规时间,'MM'),'02',count(*)) as '2月',
       ......
       decode(to_char(违规时间,'MM'),'12',count(*)) as '12月'
from table
group by 违规类型

------解决方案--------------------
  楼上的要改下,decode(to_char(违规时间,'MM'),'01',count(*)) 会提示 违规时间 不是 group by表达式的。

create table TMP_TEST
(
  id     NUMBER,
  c_type VARCHAR2(20),
  d_time DATE
);

insert into TMP_TEST (ID, C_TYPE, D_TIME) values (1, '违规类型1', to_date('01-05-2012', 'dd-mm-yyyy'));
insert into TMP_TEST (ID, C_TYPE, D_TIME) values (2, '违规类型1', to_date('17-05-2012', 'dd-mm-yyyy'));
insert into TMP_TEST (ID, C_TYPE, D_TIME) values (3, '违规类型1', to_date('01-06-2012', 'dd-mm-yyyy'));
insert into TMP_TEST (ID, C_TYPE, D_TIME) values (4, '违规类型1', to_date('01-08-2012', 'dd-mm-yyyy'));
insert into TMP_TEST (ID, C_TYPE, D_TIME) values (5, '违规类型2', to_date('01-05-2012', 'dd-mm-yyyy')); 
insert into TMP_TEST (ID, C_TYPE, D_TIME) values (6, '违规类型2', to_date('01-06-2012', 'dd-mm-yyyy'));
insert into TMP_TEST (ID, C_TYPE, D_TIME) values (7, '违规类型2', to_date('01-08-2012', 'dd-mm-yyyy'));
commit;


查询sql:

select c_type,
       count(decode(to_char(d_time, 'mm'), '01', 1)) "1月",
       count(decode(to_char(d_time, 'mm'), '02', 1)) "2月",
       count(decode(to_char(d_time, 'mm'), '03', 1)) "3月",
       count(decode(to_char(d_time, 'mm'), '04', 1)) "4月",
       count(decode(to_char(d_time, 'mm'), '05', 1)) "5月",
       count(decode(to_char(d_time, 'mm'), '06', 1)) "6月"
  from TMP_TEST
 group by c_type;


------解决方案--------------------
格式大概就这样了  分别判断12月


select c_type,
       count(decode(to_char(d_time, 'mm'), '01', 1,0)) "1月",
       count(decode(to_char(d_time, 'mm'),&n