CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

高手请进,实现这个帐龄查询的思路?

楼主clear_liu(中国人)2001-11-21 10:12:07 在 MS-SQL Server / 基础类 提问

发货表:日期,客户,发货金额  
          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

相关问题

  • 复杂查询的解决思路
  • 200分求二次查询的思路~
  • 查询问题,在线等待!给出解决思路即可。
  • 求通用查询的原码 与思路
  • 做个灵活查询,高人给个思路
  • 如何制作 查询 请给个思路。。。谢谢,帮顶。。
  • 求:万能查询,设计思路!结帖给分!
  • 问一个SQL查询 找问题的思路?
  • 关于--模糊查询,一点思路都没有?急,在线等等等...
  • 高分求思路,上百个表查询,添加,修改,删除的开发

关键词

  • 客户
  • 查询
  • 用户
  • 发货
  • 核销
  • 回款
  • 金额
  • 表
  • 合计
  • 帐龄查询

得分解答快速导航

  • 帖主:clear_liu
  • GodHack
  • Haiwer
  • jassonlu

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo