数据按周分组 按星期统计 的 PB报表

leafwithwind 2012-03-17 01:43:07
在數據庫中有一個數據表,表结构如下:
DATE WEEKDAY NWEEK WORKER WNAME QTY HOUR
2012/3/1 星期四 W9 0927 小A 100 8
2012/3/1 星期四 W9 0929 小B 20 4
2012/3/5 星期一 W10 0927 小A 10 4

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

W9 星期一 星期二 星期三 星期四 總數
WORKER WNAME QTY HOUR QTY HOUR QTY HOUR QTY HOUR QTY HOUR
0927 小A 100 8 100 8
0929 小B 20 4 20 4


W10 星期一 星期二 星期三 星期四 總數
WORKER WNAME QTY HOUR QTY HOUR QTY HOUR QTY HOUR QTY HOUR
0927 小A 10 4 10 4
0929 小B


...全文
204 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kenshu 2012-03-17
  • 打赏
  • 举报
回复
留意,时间条件一定要加在 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

kenshu 2012-03-17
  • 打赏
  • 举报
回复
不管有没有数据都要显示的报表,如果要简单点,做个表 t_days(c1 date),从1990-2020(或更长一点,保证程序生命周期一定用不完就行,反正这张表占的空间对于整个数据库而言可以忽略),每天一条数据.

之后

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

ORACLE下,加这个日期条件的开销基本上可以忽略
fuxiaoyang13 2012-03-17
  • 打赏
  • 举报
回复
有存储过程啊!
sybasebbs 2012-03-17
  • 打赏
  • 举报
回复
我靠!!

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧