首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

数据按周分组 按礼拜统计 的 PB报表

2013-01-08 
数据按周分组 按星期统计 的 PB报表在數據庫中有一個數據表,表结构如下:DATEWEEKDAYNWEEKWORKERWNAMEQTYHO

数据按周分组 按星期统计 的 PB报表
在數據庫中有一個數據表,表结构如下:
DATEWEEKDAYNWEEKWORKERWNAMEQTYHOUR
2012/3/1星期四W90927小A1008
2012/3/1星期四W90929小B204
2012/3/5星期一W100927小A104

需要做一个报表(格式如下),NWEEK表示一年的第几周(W9表示第9周),按周分组后,再按星期几统计总数(QTY、HOUR)。
星期一到星期日都要显示,不管那天有没有数据都要显示(比如星期一在数据库中没有数据,但报表也会显示星期一)。此数据库用的是ORACLE,

W9星期一星期二星期三星期四總數
WORKERWNAMEQTYHOURQTYHOURQTYHOURQTYHOURQTYHOUR
0927小A10081008
0929小B204204


W10星期一星期二星期三星期四總數
WORKERWNAMEQTYHOURQTYHOURQTYHOURQTYHOURQTYHOUR
0927小A104104
0929小B



[解决办法]
有存储过程啊!
[解决办法]
不管有没有数据都要显示的报表,如果要简单点,做个表 t_days(c1 date),从1990-2020(或更长一点,保证程序生命周期一定用不完就行,反正这张表占的空间对于整个数据库而言可以忽略),每天一条数据.

之后

select t_days.c1,......
from t_days,你原来的查询
where t_dyas.c1 = 你原来的查询.日期列(+)
and t_days.c1 符合你的时间条件;

ORACLE下,加这个日期条件的开销基本上可以忽略
[解决办法]
留意,时间条件一定要加在 t_days.c1 

而不是在原来的查询中.

因为需要用(+),加在原来查询中的时间条件,会使(+)失去意义.

同时,因为类似上述的原因,一般的做法是,把原来整个个查询出来的东西作为一个查询来用.


如,原来是

select t1.c1 as c1,t2.c2 as c2,...,t100.c100 as c100
from t1...c100
where ......

你后面要做成

select t_dyas.c1,view_1.c100
from t_days,
(select t1.c1 as c1,t2.c2 as c2,...,t100.c100 as c100
from t1...c100
where ....../*其它条件在这里*/) as view_1
where t_days.c1 = view_1.时间(+)
and and t_days.c1 符合你的时间条件;

也就是,原来整个SQL做成 (your sql ) as view_1

热点排行