|||
1\实现场景:
本效果主要是oracle数据库下使用。
如果有类似排班的功能,给每个人排班后,形成的数据下图:
2、 日程部件实现方式:
现在需要方便的查看,一般情况下我们使用度量快速开发平台中的日程部件来实现,而且也是能很方便实现。实现效果如下图:
如果要很方便的导出,以及展示格式更好看。可以采用平台的网格部件来显示实现。
3、网格实现方式:
网格部件中实现类似日历显示的效果,实际上核心思想是在sql语句中来组合形成。Oracle中实现显示一个月的日历效果如下图:
[A] 代码示例代码:
select ceil((to_char(everyday,'dd')+(to_char(to_date('2015-06-01','yyyy-mm-dd'),'d')-2))/7) as 周,'日期' 时间,
to_char(sum( decode(to_char(everyday,'dy'),'星期一',to_char(everyday,'dd')))) as 星期一,
to_char(sum( decode(to_char(everyday,'dy'),'星期二',to_char(everyday,'dd')))) as 星期二,
to_char(sum( decode(to_char(everyday,'dy'),'星期三',to_char(everyday,'dd')))) as 星期三,
to_char(sum( decode(to_char(everyday,'dy'),'星期四',to_char(everyday,'dd')))) as 星期四,
to_char(sum( decode(to_char(everyday,'dy'),'星期五',to_char(everyday,'dd')))) as 星期五,
to_char(sum( decode(to_char(everyday,'dy'),'星期六',to_char(everyday,'dd')))) as 星期六,
to_char(sum( decode(to_char(everyday,'dy'),'星期日',to_char(everyday,'dd')))) as 星期日
from (select to_date('2015-06-01','yyyy-mm-dd') + level - 1 as everyDay
from dual connect by level <= (last_day(to_date('2015-06-01','yyyy-mm-dd')) - to_date('2015-06-01','yyyy-mm-dd') +1) )
group by ceil((to_char(everyday,'dd')+(to_char(to_date('2015-06-01','yyyy-mm-dd'),'d')-2))/7)
order by ceil((to_char(everyday,'dd')+(to_char(to_date('2015-06-01','yyyy-mm-dd'),'d')-2))/7)
实现这种代码后,我们只需要想办法把排班数据想办法另外组合成类似的数据,并通过排序显示到不同周的下面。
再做一个业务数据的查询效果数据,也是类似的做法:
需要注意的是里面的周,我是加了一个值,便于后面组合排序的时候放在相应的行中。
[B]代码示例代码:
select *from (
select ceil((to_char(everyday,'dd')+(to_char(to_date('2015-06-01','yyyy-mm-dd'),'d')-2))/7)+0.1 as week,b.班次,
replace(Wm_concat(Decode(To_char(everyday,'dy'),'星期一',b.姓名)),',',chr(10)) as 星期一,
replace(Wm_concat(Decode(To_char(everyday,'dy'),'星期二',b.姓名)),',',chr(10)) as 星期二,
replace(Wm_concat(Decode(To_char(everyday,'dy'),'星期三',b.姓名)),',',chr(10)) as 星期三,
replace(Wm_concat(Decode(To_char(everyday,'dy'),'星期四',b.姓名)),',',chr(10)) as 星期四,
replace(Wm_concat(Decode(To_char(everyday,'dy'),'星期五',b.姓名)),',',chr(10)) as 星期五,
replace(Wm_concat(Decode(To_char(everyday,'dy'),'星期六',b.姓名)),',',chr(10)) as 星期六,
replace(Wm_concat(Decode(To_char(everyday,'dy'),'星期日',b.姓名)),',',chr(10)) as 星期日
from (select to_date('2015-06-01','yyyy-mm-dd') + level - 1 as everyDay
from dual connect by
level<= (last_day(to_date('2015-06-01','yyyy-mm-dd')) - to_date('2015-06-01','yyyy-mm-dd') +1)
) a,
(
select 日期,班次,姓名 from xy_排班_排班记录 where 科室ID=2069 and 月度='2015-06'
) b where a.everyday=b.日期(+)
group by
ceil((to_char(everyday,'dd')+(to_char(to_date('2015-06-01','yyyy-mm-dd'),'d')-2))/7)+0.1,b.班次
最后把[A]代码 和 [B]代码的脚本联合查询形成[C]代码,按照周的大小 排序即可。
[C]代码示例代码:
SELECT 周,时间,星期一,星期二,星期三,星期四,星期五,星期六,星期日 from (
[A] 代码 union all [B]代码 ) order by 周
形成效果:
[C]代码作为业务表,设置不同的查询条件,并放到网格部件中,就形成很好日历效果图:
类实现思路,就是使用Oracle写查询语句。因此希望通过类似的案例,提高大家的业务实现能力。
Powered by Discuz! X3.2
© 2001-2013 Comsenz Inc.