|
主题: 讨论:有什么高招
|
蓝鲸
职务:版主
等级:5
金币:42.1
发贴:2614
|
#12006/5/24 15:04:14
最近在做个系统, 是单位支出费用统计系统,统计查询如下结构:
交通费用支出 7200 ┈ 统计数 ├差旅费用 5200 ┈ 统计数 │├市内 1500 ┈ 查询数 │├省内 2500 ┈ 查询数 │└国内 1200 ┈ 查询数 └交通津贴 2000 ┈ 查询数 办公费用支出 5500 ┈ 统计数 ├通讯费 2000 ┈ 查询数 └办公用品 3500 ┈ 统计数 ├文具 1500 ┈ 查询数 └办公用纸 2000 ┈ 查询数
从上结构看,是一树形分支结构,即每一大类包含小类,最末端的节点是实际输入数据或可以直接查询的数据存放项。 父类:包含各子节点,没有直接数据,但要求统计各子节点的数据,也即父节点是各子节点数据的总和。
输入方法: 是按逐项输入的,如输入:办公用纸--300--(2006-5-18支出时间),按确定,这300元是随时可以查询到,并可修改。
难点: (1)该报表结构不是固定的,各年度的报出项可能是要求定制。 (2)要实现灵活的查询,即按月、年、和指定日期内的统计数据,所以比较难考虑生成数据表的方法 (3)父节点的数据是无法直接查询的,但通过查询子节点(末端)的数据,统计生成。
难度比较大些,各位有什么高招,或有什么想法可不必顾忌,一句二句都行。
编辑历史:[此帖最近一次被 蓝鲸 编辑过(编辑时间:2006-05-24 15:32:23)]
非常大鱼
|
studyASP
职务:普通成员
等级:1
金币:0.0
发贴:44
|
#22006/5/24 15:10:32
这个不是和论坛分坛一样的吗?
|
studyASP
职务:普通成员
等级:1
金币:0.0
发贴:44
|
#32006/5/24 15:13:30
哦,需要实现多次分坛。 无限级分坛我也还没考虑过 不过动网论坛实现了这个 可以参考研究一下
|
蓝鲸
职务:版主
等级:5
金币:42.1
发贴:2614
|
#42006/5/24 15:13:58
studyASP在上个帖子中说 引用: 这个不是和论坛分坛一样的吗?
有点类似分论坛结构,也即树形结构, 不过需要有统计功能
非常大鱼
|
蓝鲸
职务:版主
等级:5
金币:42.1
发贴:2614
|
#52006/5/24 15:15:12
另外定制的可暂时不要考虑,难度比较大些
非常大鱼
|
studyASP
职务:普通成员
等级:1
金币:0.0
发贴:44
|
#62006/5/24 15:25:03
哦 哦哦 暂时没招 先花点时间考虑
|
缺缺
职务:管理员
等级:8
金币:41.0
发贴:9620
|
#72006/5/24 15:41:56
我凭空想象了一下,或者我没有能够理解吧.感觉不会有什么问题. 一个树行结构,录入应该没有什么难度,查询似乎也不是什么问题.不知道所说的灵活查询是灵活到什么程度
比如查询两个不是一个级别的节点的总和?
|
Tassadar
职务:普通成员
等级:1
金币:-1.0
发贴:38
|
#82006/5/24 16:24:21
问个问题,ASP。NET有自带的树控件么 我上次用的是第三方控件,特别不稳定。 如果没有有什么办法实现树形列表。
|
studyASP
职务:普通成员
等级:1
金币:0.0
发贴:44
|
#92006/5/24 16:52:38
我有这样的办法,不过我自己都觉得不够满意,一定还有更好的办法。 希望通过我这笨拙的办法能让你想到更好的思路,但一定要贴出来哦!我暂时也还想不到更加灵活的查询办法。
数据库这样设计 表名:table id 自动编号 idno 数字 和上一级id关联 item 文本 所有项目 money 货币
假如现在存在的数据 id idno item money 1 0 交通费用支出 7200 2 0 办公费用支出 5500 3 1 差旅费用 5200 4 1 交通津贴 2000 5 2 通讯费 2000 6 2 办公用品 3500 7 3 市内 1500 8 3 省内 2500 9 3 国内 1200 10 6 文具 1500 11 6 办公用纸 2000
<% '一次性打开全部记录 set rs = Server.CreateObject("ADODB.RecordSet") sql = "select * from table" rs.open sql,conn,3,2
for i=1 to 2 '无条件循环两次,让所有子节点全部更新,再更新父节点 if not rs.Bof and not rs.Eof then do until rs.Eof=0 set rs2 = Server.CreateObject("ADODB.RecordSet") sql="select"&rs("money")&" from table where idn0="&rs("id") rs2.open sql,conn,1,1 '每个id都检测一遍,没有选择性,这也是我自己觉得不满意的地方 all=0'记录总资金 if not rs2.Bof and not rs2.Eof then do until rs2.Eof all=all+rs("money") rs.movenext loop rs.addnew rs("money")=all rs.update rs2.close set rs2=nothing end if rs.movenext loop end if next rs.close set rs=nothing %>
|
蓝鲸
职务:版主
等级:5
金币:42.1
发贴:2614
|
#102006/5/24 17:19:22
allinhands在上个帖子中说 引用: 我凭空想象了一下,或者我没有能够理解吧.感觉不会有什么问题. 一个树行结构,录入应该没有什么难度,查询似乎也不是什么问题.不知道所说的灵活查询是灵活到什么程度
比如查询两个不是一个级别的节点的总和?
如果结构正确了,可能查询也不算是问题,是一般的查询 比如2006-4-15至2006-5-8的各项支出小计、累计数等,就是要出一张统计报表,如顶楼的清单一样 我自己设计了一个结构,但由于这方面的讨论不是很多,而这种统计带有普遍性,并且稍有些难度,就先讨论一下。希望能有些高效的想法。
非常大鱼
|
蓝鲸
职务:版主
等级:5
金币:42.1
发贴:2614
|
#112006/5/24 17:20:56
Tassadar在上个帖子中说 引用: 问个问题,ASP。NET有自带的树控件么 我上次用的是第三方控件,特别不稳定。 如果没有有什么办法实现树形列表。
不是很有用,因为希望这个查询结构象一张报表一样,而不单单仅列出项目名称
非常大鱼
|
蓝鲸
职务:版主
等级:5
金币:42.1
发贴:2614
|
#122006/5/24 17:28:23
studyASP在上个帖子中说 引用: 我有这样的办法,不过我自己都觉得不够满意,一定还有更好的办法。 希望通过我这笨拙的办法能让你想到更好的思路,但一定要贴出来哦!我暂时也还想不到更加灵活的查询办法。
数据库这样设计 表名:table id 自动编号 idno 数字 和上一级id关联 item 文本 所有项目 money 货币
假如现在存在的数据 id idno item money 1 0 交通费用支出 7200 2 0 办公费用支出 5500 3 1 差旅费用 5200 4 1 交通津贴 2000 5 2 通讯费 2000 6 2 办公用品 3500 7 3 市内 1500 8 3 省内 2500 9 3 国内 1200 10 6 文具 1500 11 6 办公用纸 2000
<% '一次性打开全部记录 set rs = Server.CreateObject("ADODB.RecordSet" sql = "select * from table" rs.open sql,conn,3,2
for i=1 to 2 '无条件循环两次,让所有子节点全部更新,再更新父节点 if not rs.Bof and not rs.Eof then do until rs.Eof=0 set rs2 = Server.CreateObject("ADODB.RecordSet" sql="select"&rs("money"&" from table where idn0="&rs("id" rs2.open sql,conn,1,1 '每个id都检测一遍,没有选择性,这也是我自己觉得不满意的地方 all=0'记录总资金 if not rs2.Bof and not rs2.Eof then do until rs2.Eof all=all+rs("money" rs.movenext loop rs.addnew rs("money"=all rs.update rs2.close set rs2=nothing end if rs.movenext loop end if next rs.close set rs=nothing %>
表项结构和我想得差不多,用idno来自身链接 但是“交通费用支出”这项是不能输入的,这项应该是输入下属项后,统计出的结果,也就是只能输入最末端的项目(市内、省内)这些项目,有子类的项目不能直接输入。 可能我说得不是很明白 数据库结构上设置上与我原来想得差不多,谢谢 刚才的查询直接查询数据有 4 1 交通津贴 2000 5 2 通讯费 2000 7 3 市内 1500 8 3 省内 2500 9 3 国内 1200 10 6 文具 1500 11 6 办公用纸 2000 其它都不能用SQL查询出来
非常大鱼
|
studyASP
职务:普通成员
等级:1
金币:0.0
发贴:44
|
#132006/5/24 17:29:11
哦 ,晕了 没注意还需要按时间查询
|
studyASP
职务:普通成员
等级:1
金币:0.0
发贴:44
|
#142006/5/24 17:33:52
不用谢的 你帮助了这么多人的困难 我这点不算什么 而且 我都还没帮上你忙呢
|
yiliaocheng
职务:普通成员
等级:2
金币:2.0
发贴:631
|
#152006/5/24 17:43:46
我只说下查询方面。数据表设计成年、月、日三个字段,查询的时候可以按年月日查询,也可以按日期查询(要求日期输入格式为2006-05-01,然后分割成三个数字查询),还可以查询指定天数内等。
|