高手请进,实现这个帐龄查询的思路?
发货表:日期,客户,发货金额
20010101,0001,100
20010201,0002,100
20010210,0001,100
20010301,0003,100
........,....,...
回款表:日期,客户,回款金额
20010201,0001,150
20010401,0003,80
20010402,0002,100
20010501,0001,50
........,....,..
1次发货可能对应以后多次回款,直到当次回款或以后多次回款把当次发货金额全部核销.以后回款接着核销下次发货金额.
如果当次回款额比当次发货额大,则把剩余回款与下次发货核销.
目标:按客户分时间段的回款汇总发货金额合计,如下表:
客户,1-3月内回款的发货金额合计,3-6月内回款的发货金额合计,12月以上发货合计
....
....
问题:
1.实现这个查询的思路应该是什么?
2.用SQL语句循环,但是怎样实现?
问题点数:63、回复次数:15Top
1 楼GodHack(勇敢的心)回复于 2001-11-21 10:27:41 得分 10
首先我觉得你的两个表之间没有一个关联,应该设置一个发货号来关联该回款是对应哪次发货号,(现实也应该是这样的吧),因为如果凭客户和日期来确定回款是属于哪个发货则时间一长而且此客户是长期客户的话数据量将是很大,查询效率不会很高!你的核销是什么意思?将发货金额置为零吗?Top
2 楼clear_liu(中国人)回复于 2001-11-21 10:59:29 得分 0
to:GodHack
核销就是把回款与发货进行"勾调",确定此次回款哪些是第一次发货的,哪些是第二次发货的.不是置为零.
因一次回款可能对应多次发货,所以无法设置关联.只是采用"先回款的对应先发货的"方法.
Top
3 楼Haiwer(海阔天空)回复于 2001-11-21 12:02:53 得分 43
to: clear_liu(中国人)
你好!
你的问题难解决!
其实查出到某一天各客户的存欠就够了吧?Top
4 楼Haiwer(海阔天空)回复于 2001-11-21 12:04:31 得分 0
而且,你每次必须扫描这两个表,应该考虑一个月结表!Top
5 楼jassonlu(虾米)回复于 2001-11-21 12:23:18 得分 0
对于发货表中的每个客户的发货记录,使用
select sum(回款金额) from 回款表 where 客户号=发货表中的客户号,比较发货表中的金额和此次查询到的金额,相等的话就核销咯。可以用一个SP解决。Top
6 楼jassonlu(虾米)回复于 2001-11-21 12:24:56 得分 10
对于同一客户,有可能有多次发货,所以你的表建得有问题,最好在两个表中加多个发货号进行联系。Top
7 楼GodHack(勇敢的心)回复于 2001-11-21 13:05:24 得分 0
表的设计有问题,最好建成三个表,发货表,回款表和发货回款表(确定对应关系),这样处理要方便得多Top
8 楼mmzxg(超级笨蛋)回复于 2001-11-21 13:28:29 得分 0
对,表结构不合理Top
9 楼Haiwer(海阔天空)回复于 2001-11-21 13:45:20 得分 0
也可以在两个表加一个对应的字段,然后在两个表加触发器,插入是按先进先出原则来对应,删除时按后进先出原则来去掉对应,修改要判断是不是修改了发货金额(回款金额)、客户,分别对待。
这个方法要注意性能,因为这个触发器需要使用游标,速度要调试才能知道!
Top
10 楼clear_liu(中国人)回复于 2001-11-21 14:26:01 得分 0
谢谢!大家的建议都很好!
因一次发货可能对应多次回款,一次回款又可能对应多次发货.两个表实际上是多对多关系.
正常情况下,我打算在两个表后面各加两列:已核销额,未核销额.由用户手工进行核销.
而现在有一部分(2001年10月以前)数据,用户是按每客户每月一条发货记录和一条回款记录录入的.是月合计数,所以无法手工核销,只能暂时用先进先出法用计算机核销.
如果回款表加一列(发货号),且不存在以上的月合计情况,那么最后的帐龄查询又如何实现呢?
Top
11 楼Haiwer(海阔天空)回复于 2001-11-21 14:41:34 得分 0
>>如果回款表加一列(发货号),且不存在以上的月合计情况,那么最后的帐龄查询又如何实现呢?
我觉得在回款表加发货号不可取,因为你这不单单是多对多关系,而且有可能出现对不完的情况(因为是金额,可能出现一边有0.5元而另一边从来就没有的情况)。
Top
12 楼clear_liu(中国人)回复于 2001-11-21 15:51:44 得分 0
to:Haiwer
Haiwer兄所言甚是.所以只能由用户手工进行核销,后加两列已核销额和未核销额Top
13 楼clear_liu(中国人)回复于 2001-11-21 16:49:58 得分 0
to:GodHack(剑无霜)
如果按你所说建一个发货回款表(回款号,发货号,金额)的话,以上此帐龄查询问题该如何实现?Top
14 楼Haiwer(海阔天空)回复于 2001-11-21 17:11:33 得分 0
我以前有遇到过类似的问题,客户都是关系很好的客户,有可能先付款后提货,也有可能提货后很长时间才付款.
我们的做法是定时了结,了结出一个客户存欠金额,放到另一个表,也可以打印明细的对帐单.
用户手工进行核销的方法能用,但效率不高,不知道你的用户能不能接受!
Top
15 楼clear_liu(中国人)回复于 2001-11-21 19:12:42 得分 0
to:Haiwer:
谢谢你的热心答复!你的方法对以后的正常运行时很有帮助.我会仔细考虑的.
但我的目的是实现帐龄查询.即结果要求:
客户,1-3月内回款的发货金额合计,3-6月内回款的发货金额合计,12月以上发货合计
当然需要对基础表做什么调整都成,只要能查出来就行.Top




