设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 6286|回复: 18
打印 上一主题 下一主题

[查询] 于表自身内部建立关系的多条记录汇总查询的问题

[复制链接]
跳转到指定楼层
1#
发表于 2008-3-13 08:18:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
100金钱
如实例中的List表,是一个典型的Tree模型,Parent字段指向该节点的父节点

现在想做一个查询,计算一个根节点下的所有子节点Weight之和。

增加赏金了~!

[ 本帖最后由 fannky 于 2008-3-15 10:57 编辑 ]

附件: 您需要 登录 才可以下载或查看,没有帐号?注册
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2008-3-13 09:45:27 | 只看该作者
是的,能否详细说明一下
回复

使用道具 举报

3#
 楼主| 发表于 2008-3-13 10:50:29 | 只看该作者

如图所示表中的关系,想得到最后这个累加的结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

4#
发表于 2008-3-13 13:15:22 | 只看该作者
顶一下!关注
了解一下。学习学习!!!1
回复

使用道具 举报

5#
发表于 2008-3-13 15:24:59 | 只看该作者
既然楼主想到了节点,那么我提供一个方法,利用编码对其进行管理和计算
H
    |__HA
    |__ HB
            |____HB01   
然后就可以利用查询来归纳这里的数值了
以上只是一种方法,可以参考一下
回复

使用道具 举报

6#
 楼主| 发表于 2008-3-13 15:31:05 | 只看该作者
以下是一个方法参考,不过较复杂,并且不能无限级的操作:
这种方法在SQL中利用存储过程实现了,但是依然非常不理想

DECLARE @s  VARCHAR(1000)
DECLARE @id SMALLINT
set @s='1,'

DECLARE cur1 CURSOR FOR   select [id] from list where parent=1
OPEN cur1  /***** 游标1  *****/
FETCH NEXT FROM cur1 INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
   set @s=@s + convert(varchar,@id) + ','
   DECLARE cur2 CURSOR FOR select [id] from list where parent=@id
   OPEN cur2  /***** 游标2  *****/
   FETCH NEXT FROM cur2 INTO @id
   WHILE @@fetch_status=0
   BEGIN
     set @s=@s + convert(varchar,@id) + ','
     DECLARE cur3 CURSOR FOR select [id] from list where parent=@id
     OPEN cur3  /***** 游标3  *****/
     FETCH NEXT FROM cur3 INTO @id
     WHILE @@fetch_status=0
     BEGIN
       set @s=@s + convert(varchar,@id) + ','
       --   如果还有下一级就在此继续写:游标 4 , 5, 6 ... 照此类推
       FETCH NEXT FROM cur3 INTO @id
     end
     CLOSE cur3
     DEALLOCATE cur3
   
     FETCH NEXT FROM cur2 INTO @id
   END
   CLOSE cur2
   DEALLOCATE cur2
   FETCH NEXT FROM cur1 INTO @id
END
CLOSE cur1
DEALLOCATE cur1

set @s=Left(@s,Len(@s)-1)

EXEC ('select weight=sum(weight) from list where parent in ('+ @s +')')  /* 合计 */
回复

使用道具 举报

7#
 楼主| 发表于 2008-3-14 08:17:03 | 只看该作者
依然没有ACCESS中的解决办法吗?

5#楼的朋友说的方法可以实现,但是还要重新更改表的结构
能不能不更改表的结构实现?
回复

使用道具 举报

8#
发表于 2008-3-14 10:27:26 | 只看该作者
请问是不是要实现类似下图的效果?
咦,我竟然无法跟帖发图?

[ 本帖最后由 咱家是猫 于 2008-3-14 10:28 编辑 ]
回复

使用道具 举报

9#
发表于 2008-3-14 11:04:34 | 只看该作者
声明一个变量
Dim C as long
......
在每个节点添加前先取这个C值,如:
C=DSum("Weight","List","Parent="& RS!Rarent &"")
Set Nodindex = XTree.Nodes.Add("父", tvwChild, Rs![编号], Rs![Name] & "(" & C & ")")
......
回复

使用道具 举报

10#
 楼主| 发表于 2008-3-14 13:33:36 | 只看该作者
猫咪说对了
是这样的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-7 08:29 , Processed in 0.113097 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表