急求一条统计一年每个月某个字段总数量的SQL语句,条件有点特殊,该如何解决
急求一条统计一年每个月某个字段总数量的SQL语句,条件有点特殊
情况是这样的:
有案件信息表:case_tb 里面有下面几个字段
ajbh 案件编号
case_date 案发日期
input_date 录入时间
foot_num 足迹数量
unit_code 单位代码
有单位表:unit_tb 里面有下面几个字段
unit_code unit_name
单位代码 单位名称
需求:要实现的统计功能是根据用户选择的年份,比如2011年,把这一年中每个月单位的足迹数量统计出来
条件:麻烦的就是月的统计时间是从上个月20日开始算起到本月21日止(本月的数据),比如统计2011年1月份的,那就是从2010年12月20日到2011年1月21日,2月份的,那就是从1月20日到2月21日
效果如下图:

请问这个统计的SQL语句该怎么写?
------解决方案--------------------
不知道能不能通过这样的方式来连接?
------解决方案--------------------
------解决方案--------------------
select code,case monthNum when 1 then total else 0 end as month1,
case monthNum when 2 then total else 0 end as month2,
情况是这样的:
有案件信息表:case_tb 里面有下面几个字段
ajbh 案件编号
case_date 案发日期
input_date 录入时间
foot_num 足迹数量
unit_code 单位代码
有单位表:unit_tb 里面有下面几个字段
unit_code unit_name
单位代码 单位名称
需求:要实现的统计功能是根据用户选择的年份,比如2011年,把这一年中每个月单位的足迹数量统计出来
条件:麻烦的就是月的统计时间是从上个月20日开始算起到本月21日止(本月的数据),比如统计2011年1月份的,那就是从2010年12月20日到2011年1月21日,2月份的,那就是从1月20日到2月21日
效果如下图:
请问这个统计的SQL语句该怎么写?
------解决方案--------------------
不知道能不能通过这样的方式来连接?
SELECT add_months(ADD_MONTHS(DATE'2010-12-01',LEVEL)+19,-1) AS COL1
FROM DUAL
CONNECT BY LEVEL <= 12
COL1
--------------------------
1 2010/12/20
2 2011/1/20
3 2011/2/20
4 2011/3/20
5 2011/4/20
6 2011/5/20
7 2011/6/20
8 2011/7/20
9 2011/8/20
10 2011/9/20
11 2011/10/20
12 2011/11/20
------解决方案--------------------
定义一个计算上个月的函数
create or replace function F_Pre_month(pi_yearmonth in varchar2) return varchar2 is
Result varchar2(6);
year number;
month number;
begin
year:=to_number(pi_yearmonth,1,4);
month:=to_number(pi_yearmonth,5,2);
month:=month-1;
if(month<=0) then
month:=12;
year:=year-1;
end if;
Result:=year
------解决方案--------------------
lpad(to_char(month),2,'0');
return(Result);
end F_Pre_month;
然后
select
2012
------解决方案--------------------
lpad(to_char(rownum),2,'0') 月份,
F_Pre_month(2012
------解决方案--------------------
lpad(to_char(rownum),2,'0'))
------解决方案--------------------
'20' 起始日期,
2012
------解决方案--------------------
lpad(to_char(rownum),2,'0')
------解决方案--------------------
'21' 结束日期
from dual connect by rownum<=12
可以算出每个月的起始和结束日期
其他的就好处理了
------解决方案--------------------
select code,case monthNum when 1 then total else 0 end as month1,
case monthNum when 2 then total else 0 end as month2,