数据按周分组 按星期统计 的 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