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

group by 做报表 出结果就结贴
表结构 字段有 编号, 违规类型,违规时间
怎么样能够统计成 
 & 1月 2月 3月 4月 5月  
违规类型1 10起 9起
违规类型2 11起 6起
违规类型3




------解决方案--------------------
SQL code

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表达式的。
SQL code

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;

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

SQL code

select c_type,
       count(decode(to_char(d_time, 'mm'), '01', 1,0)) "1月",
       count(decode(to_char(d_time, 'mm'), '02', 1,0)) "2月"
  from TMP_TEST
 group by c_type;