SQL高手求助,要做个报表如果日期连续则取最大最小日期,如果日期间断则分段显示

图片说明
如图所示是报表的最终格式,要求如下:
1.费用按收费项目汇总
2.如果缴费周期连续(如:一次性缴费8,9,10月份),则所属日期显示:8/1---10/31
如果缴费周期中断(如:缴费7,8,10月份),则所属日期显示:7/1--8/31;10/1--10/31

请告诉指点,不胜感激!

这个需求 有点恶心

写一个函数,create or replace function FN_get_configtext
(
av_str varchar2 --要分割的字符串
)
return varchar2
is
lv_str varchar2(1000); --每次要分割的字符
re_str_ls varchar2(1000); --每一个类型
re_str_ls1 varchar2(1000); --每一个类型
re_str varchar2(1000);--拼合所有类型
lv_length number;
av_split varchar2(4);
begin
av_split := ';';----分隔符 根据需要自己修改
lv_str:=ltrim(rtrim(av_str));
lv_length:=0;

if lv_str is null or trim(lv_str)= '' then re_str := ' and 1=1 ';
ELSE
/**** and a.subjext_code in 为字段名 根据需要自己修改 ****/
re_str := ' and a.subjext_code in (';
while instr(lv_str,av_split) <> 0 loop
lv_length:=lv_length+1;
re_str_ls1 := substr(lv_str,0,instr(lv_str,av_split)-1);---返回第一个字符串
lv_str:=substr(lv_str,instr(lv_str,av_split)+length(av_split),length(lv_str));--
re_str := re_str||''''||re_str_ls1||''',';
end loop;
re_str := re_str||''''||lv_str||''')';
end if;

return re_str;
end FN_get_configtext;
/

利用函数拆开这一行,然后分开显示