设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: 尘埃待落定
打印 上一主题 下一主题

[帮助] 求每笔货的货龄计算查询

[复制链接]
11#
发表于 2009-3-17 21:04:50 | 只看该作者


用查询可以实现,但前提是数据不要太大,比如上万级。

此外你的表 [区间] 最后一条从逻辑上与其它不一致。其它均为该区间的上限值。建议改181为9999999。这样查询语句可以少一个NZ的步骤,提高一些效率。
序号 编码 条件   备注
1    1    0      现款
2    2    30     30天内
3    3    60     31-60天
4    4    90     61-90
5    5    120    91-120
6    6    150    121-150
7    7    180    151-180
8    8    181    181天以上


SQL查询的思路是得出累计值,及不包含本次值的累计值。然后做联接比较

TRANSFORM Sum(pAmt) AS pAmtOfSum
SELECT 公司编码, 发货日期, 发货金额
FROM (
    SELECT s.公司编码, s.发货日期, s.发货金额,
        dlookup('备注','区间','条件='& nz(dmin('条件','区间','条件>='&r.收款日期-s.发货日期),181)) AS payterm,
        iif(s.accAmt<r.accAmt,s.accAmt,r.accAmt) - iif(s.pAccAmt>r.pAccAmt,s.pAccAmt,r.pAccAmt) AS pAmt
    FROM (
        SELECT 公司编码, 发货日期, 发货金额,
        val(dsum('发货金额','发货','公司编码='&公司编码&' and 发货日期<=#'&发货日期&'#')) AS accAmt, accAmt-发货金额 AS pAccAmt
        FROM 发货
    ) AS s INNER JOIN (
        SELECT 公司编码, 收款日期, 收款金额,
        val(dsum('收款金额','收款','公司编码='&公司编码&' and 收款日期<=#'&收款日期&'#')) AS accAmt, accAmt-收款金额 AS pAccAmt
        FROM 收款
    ) AS r ON s.公司编码=r.公司编码 and s.accAmt>r.pAccAmt and s.pAccAmt<r.accAmt
)
GROUP BY 公司编码, 发货日期, 发货金额
PIVOT payterm  ;



在不复杂的情况下可以通过上述SQL语句实现查询,但数据量大的情况下,建议使用VB程序来实现。




******************
*  一切皆有可能  *
******************

.
ACMAIN - Access论坛回贴准则(个人).
.

.
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://www.office-cn.net/vvb/ .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
.
http://www.office-cn.net/home/space.php?uid=141646 .

本帖子中包含更多资源

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

x
12#
 楼主| 发表于 2009-3-20 13:44:58 | 只看该作者
本帖最后由 尘埃待落定 于 2009-3-20 16:15 编辑

非常感谢ACMAIN_CHM ,效率的确是上大问题
同时谢谢您的建议
再请问分解成多个查询然后使用更新表或生成表,是不是可以分解一下执行的效率,至少不会有太多的等待的感觉.

经过测试,一万多条记录时查询需要2个小时,而通分解查询,并将一些查询重新生成表再利用,最终1分钟可得结果

不过结果导回去有点不对,现正在查找原因

再次感谢ACMAIN_CHM!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-25 02:41 , Processed in 0.082393 second(s), 24 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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