Office中国论坛/Access中国论坛

标题: 请问数据递减查询怎么用SQL编写 [打印本页]

作者: andrewzeng    时间: 2009-4-9 00:06
标题: 请问数据递减查询怎么用SQL编写
如图和标题所示,再次提前感谢各位
作者: Henry D. Sy    时间: 2009-4-9 08:22
请不要重复发帖
作者: todaynew    时间: 2009-4-9 11:44
道理和前一帖处理思路差不多,一会我给你写一下。
作者: todaynew    时间: 2009-4-9 13:35
本帖最后由 todaynew 于 2009-4-9 13:48 编辑

[attach]37200[/attach]

[attach]37201[/attach]
1、查询:
SELECT a.ID, a.组, a.姓名, a.配额, (select sum(b.配额) from 表2 as b
where b.ID<=a.ID and b.组=表1.组) AS 累计, 表1.总额
FROM 表1
INNER JOIN 表2 AS a ON 表1.组=a.组;

2、实得数查询:
SELECT a.ID, a.组, a.姓名, a.配额, a.累计, a.总额, IIf([累计]<=[总额],[配额],IIf(DLookUp("[累计]","[查询]","ID=" & [ID]-1 & " and 组='" & a.组 & "'")<[总额],[总额]-DLookUp("[累计]","[查询]","ID=" & [ID]-1 & " and 组='" & a.组 & "'"),0)) AS 实得数
FROM 查询 AS a;

说明:
1、增加了一个表1,这样可以避免数据冗余;
2、在表2中增加了一个ID字段,便于计算累计数;同时删除了实得数字段,因该字段为计算结果。
3、表1与表2以[组]字段建立一对多关系。
4、删除了表3,该表无用处。



作者: todaynew    时间: 2009-4-9 13:55
本帖最后由 todaynew 于 2009-4-9 14:04 编辑

将子查询中的条件改为:
where b.ID<a.ID and b.组=表1.组
也可以计算,只是实得数查询写法稍有差异,似乎要简洁一些。这个问题留给你自己考虑,呵呵。

另强烈建议在记录数较多情况下,采用数据集方式来解决问题,这样运算的效率要高很多,不至于造成假死机。
作者: andrewzeng    时间: 2009-4-9 18:20
todaynew,您太热心了,非常感谢。同时非常感谢您的建议




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3