当前位置: 代码迷 >> Oracle技术 >> group by 做报表 出结果就结贴,该怎么解决
  详细解决方案

group by 做报表 出结果就结贴,该怎么解决

热度:106   发布时间:2016-04-24 08:29:39.0
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 tablegroup 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;
  相关解决方案