|
用查询可以实现,但前提是数据不要太大,比如上万级。
此外你的表 [区间] 最后一条从逻辑上与其它不一致。其它均为该区间的上限值。建议改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
|