For iYear:=2001 to 2003 do begin For iMonth:=0 to 3 do begin iBeginMonth:=iMonth+1; iEndMonth:=iMonth*3+3; dBeginDay:=strtodate(inttostr(iYear)+'-'+inttostr(iBeginMonth)+'-1');
利用SQL语句中的函数,Year(日期)可以获得年份,Month(日期)可以获得月份,然后把月份数减一,这样,用0-11这来代表一年中的12个月份,这样,0-11中的每个数字除以三取整后再加一就可以得到这个月份所在的季度,这样,就可以利用group by year(日期), (month(日期)-1)/3+1 ,这样就可以统计出结果了
==============
只给了年,没季度怎么汇总!
如果有包含月的字段也可以,
在选择的时候根据月份区别季度,并汇总,如:注释:Oracle中的decode相当于SQLSERVER中的CASEselect decode(to_char(mydate,'m'),
1, 第一季度, 2, 第一季度, 3, 第一季度,
4, 第二季度, 5, 第二季度, 6, 第二季度,
7, 第三季度, 8, 第三季度, 9, 第三季度,
10, 第四季度, 11, 第四季度, 12, 第四季度) 季度,
sum(money) 金额
from table
group by decode(to_char(mydate,'m'),
1, 第一季度, 2, 第一季度, 3, 第一季度,
4, 第二季度, 5, 第二季度, 6, 第二季度,
7, 第三季度, 8, 第三季度, 9, 第三季度,
10, 第四季度, 11, 第四季度, 12, 第四季度)
begin
For iMonth:=0 to 3 do
begin
iBeginMonth:=iMonth+1;
iEndMonth:=iMonth*3+3;
dBeginDay:=strtodate(inttostr(iYear)+'-'+inttostr(iBeginMonth)+'-1');
//季末这个月的第一天
dEndDay_0:=strtodate(inttostr(iYear)+'-'+inttostr(iEndMonth)+'-1');
//季末这个月的最后一天
dEndDay:=strtodate(inttostr(iYear)+'-'+inttostr(iEndMonth)+'-'+inttostr(daysinmonth(dEndDay_0))); //函数(Get_Data)--已经定义好的
Sum_Value:=Get_Data(datetostr(dBeginDay),datetostr(dEndDay));
end;
end;
==============
只给了年,没季度怎么汇总!
如果有包含月的字段也可以,
在选择的时候根据月份区别季度,并汇总,如:注释:Oracle中的decode相当于SQLSERVER中的CASEselect decode(to_char(mydate,'m'),
1, 第一季度, 2, 第一季度, 3, 第一季度,
4, 第二季度, 5, 第二季度, 6, 第二季度,
7, 第三季度, 8, 第三季度, 9, 第三季度,
10, 第四季度, 11, 第四季度, 12, 第四季度) 季度,
sum(money) 金额
from table
group by decode(to_char(mydate,'m'),
1, 第一季度, 2, 第一季度, 3, 第一季度,
4, 第二季度, 5, 第二季度, 6, 第二季度,
7, 第三季度, 8, 第三季度, 9, 第三季度,
10, 第四季度, 11, 第四季度, 12, 第四季度)
可以根据返回值判断,类似函数dateadd(qq,getdate());datepart(qq,getdate())