打印

[asp] 3层循环做一个统计表格,请高手帮忙.

ACCESS数据库如图
统计表点 运行代码

统计表会接收一个 年份 的request 值,如2008,那就从ACCESS中统计2008年的数据.
想先做一个循环,把dept   group by 出来,然后,根据每个 dept,把DEPT下的 工作项目(subject)也 group by出来,
再 根据 对应的 部门 (dept) 和 工作项目(subject) ,for i = 1 to 12 ,把每个月的 公司目标,部门目标,实际,==,一一显示.
还有右边的total,就是一年的总和,和最下面的TOTAL,就是不分部门的总和.
数据表中的 公司目标,部门目标,和实际完成,都是针对员工的,统计表中的,应该加总.所以,数据表中的 达成率应该可以根据 统计后 来除.不同项目的 得分 是 每列的达成率*权重的和.
请高手帮忙,看怎么做?先拜谢了.

 提示:您可以先修改部分代码再运行
[ 本帖最后由 jimstory 于 2008-6-19 22:27 编辑 ]
这个说难不难,说简单呢,还是有点麻烦,不是三言两语,几行代码能解决的。
循环啊分组什么的你都已经说了,差的就是用代码具体去实现了。
你已经有了思路就自己先动手做吧,至少起个头,等到做不起走的时候遇到细节问题再来问~
如果你也嫌麻烦,人家就更嫌麻烦了,嫌麻烦就请人做,要不就自己先动手试一下,遇到具体的细节问题再来问。
淡泊以明志 宁静而致远
是我就一次读出数据,生成xml数据(无限分类型结构),其它的交给前台用JS加加减减,
[wma]http://jie.splan.cn/ggldl/梅艳芳.mp3[/wma]
哈,这几天一直上不了蓝色.
今天终于线路恢复了?
庆祝一下先。

谢谢偶像 senfe 第一次回我的帖!!!呵
我用自己的思路,搞了一下.遇到几个问题.
1,右边和下面的 total不会用数组存了显示.
2,中间那个达成率,数据库中存的是 每个员工不同工作项目单个的达成率,计算和的话,我想用 已经读出来的加总的 实际/公司目标,但是要怎么做?
3,我下面的程序运行有错误,是表格循环下来,表格有的会错位...

数据库见附件:
麻烦大家帮忙看看.

 提示:您可以先修改部分代码再运行
[ 本帖最后由 jimstory 于 2008-6-22 20:31 编辑 ]
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
我还不是很明白你的算法,你最后的
公司目标,部门目标,实际,权重,绩效 都是取之前的总和吗?
达成率是平均值?
你有些单位都不一样,也混在一起算?
如果这样可以用二维数组来计算和存放.
先解决你的表格乱掉的问题:
你一楼代码中的
<td rowspan="12">&nbsp;</td>
和四楼代码中的
<td rowspan="6"><%=Rs(0)%>&nbsp;</td>
这儿可能是导致表格乱掉的关键,
每一个"工作项目"有6行,所以你在跨行的时候,应该先取得工作项目的数量,然后*6,就是输出"部门名称"那一格所要跨的行数.
并且那一句要在循环时判断,是第一次则输出,第二次及以后就不要输出了.

示例:
复制内容到剪贴板
代码:
<%
'......
'3.选出工作项目
'......
i = 0
do while not RsC.eof
    i = i + 1
    Response.Write "  <tr>"
    if i=1 then Response.Write "    <td rowspan='" & (RsC.RecordCount*6) & "'>" & rs(0) & "</td>"
    %>
    <td rowspan="5" align="center"><%=RsC(0)%>&nbsp;</td>
    <td rowspan="5" align="center"><%=RsC(1)%>&nbsp;</td>
    <td align="left">公司目标</td>
......
  </tr>
    <%
    RsC.movenext
loop
'......
%>
[ 本帖最后由 SenFe 于 2008-6-22 22:59 编辑 ]
淡泊以明志 宁静而致远

TOP

回复 SenFe 在 5# 的帖子

谢谢senfe,我明白的你意思了.
照你的意思,可能要判断两次跨行,先判断有几个部门,再判断有几个项目.
代码如下:
复制内容到剪贴板
代码:
If rs.Eof Then
    Response.Write "<tr><td colspan=17 align=center>暂时没有记录。请重新选择年份</td></tr></table>"
  Else
i = 0
Do While Not Rs.Eof
i = i + 1
'2.输出每一行的部门 ,年份
Response.Write "<tr>"
if i=1 then
Response.Write "<td rowspan='"&(Rs.RecordCount*6)&"'>"&(rs(0))&"</td>"
'3.选出工作项目
......
If Not RsC.Eof Then
j = 0
Do While Not RsC.Eof
j = j + 1
'输出部门下出现过的工作项目
if j=1 then
Response.Write "<td rowspan='"&(RsC.RecordCount*5)&"' align='center'>"&(RsC(0))&"&nbsp;</td>"
Response.Write "<td rowspan='"&(RsC.RecordCount*5)&"' align='center'>"&(RsC(1))&"&nbsp;</td>"
%>
    <td align="left">公司目标</td>
两个 end if,我是这样放的,
复制内容到剪贴板
代码:
end if
RsC.movenext
loop
这个我调到 权重行 后面,绩效行 前面.
复制内容到剪贴板
代码:
end if
Rs.movenext
loop
这个还是在绩效行后面.

但是格式还是有点问题...见图片附件2,估计是 那两个rowspan没起作用,或者循环多了,多读了几遍,或者没GROUP BY对?注意看绩效下面的行,有一条空白.

图片附件1是我理解错了,把 if  i <> 0,然后 rowspan='"&(Rs.RecordCount*6)&"',呵呵,供参考.
另:你说的那些值的算法,  公司目标,部门目标,实际,得分,都是取和,权重和达成率先空着把,还没想明白怎么体现.

[ 本帖最后由 jimstory 于 2008-6-23 13:18 编辑 ]
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!

TOP

不用判断部门啊,主要需要得出一个部门有多少项目就行了.部分代码:

 提示:您可以先修改部分代码再运行
[ 本帖最后由 SenFe 于 2008-6-23 14:10 编辑 ]
淡泊以明志 宁静而致远

TOP

回复 SenFe 在 7# 的帖子

完美.
异常感谢senfe.向你学习.

TOP