数据表对比问题

暗石绿 2004-08-28 03:44:31
表 ArrearageList

字段:
mphonecode usrname feesumdeb recvmonth
13008708674 刘五清 10 200404
13008739366 安强 87.55 200402
13109337241 杨秀芳 23.83 200401
13008717797 李志敏 10 200401

到了月底,需要把新的数据跟表 ArrearageList 里的数据进行比较(新数据的数据表结构和ArrearageList一模一样)

新数据表 TempArrearageList

字段:
mphonecode usrname feesumdeb recvmonth
13008708674 刘五清 10 200404
13008739366 安强 165.57 200403
13109337241 杨秀芳 5 200402
13008721231 董泰山 106.33 200405

要求:
-- 新增欠费
1.如果 TempArrearageList 里有 ArrearageList 里没有的数据,就把这个新加的数据添加到 ArrearageList 里。(如现在就是要“判断” 13008721231 董泰山 这一条记录是 ArrearageList 里没有的,insert 这条记录到 ArrearageList 里)
如果新数据里 feesumdeb 值比 旧数据里 feesumdeb 的值大,这条记录也同样属于 新增欠费。
修改旧数据中 feesumdeb 的值为新数据值。(如要把 13008739366 安强 87.55 200402 这条记录改为 13008739366 安强 165.57 200403)

最后把新增数据添加到“新增数据表”NewArrearageList 表(结构也一样)

-- 未交费
2.两个表里 mphonecode usrname feesumdeb 这三个字段都相同(即数据没有改变)的话,保持原 ArrearageList 里的对应记录不动。

-- 部分交费
3.如
ArrearageList 表里
13109337241 杨秀芳 23.83 200401

TempArrearageList 表里
13109337241 杨秀芳 5 200402

因为5 < 23.83 ,所以是部分交费 。

要修改 ArrearageList 表记录为
13109337241 杨秀芳 5 200401

把此数据添加到部分交费表 PaymentDetail

-- 已交费
4. 旧数据中有,新数据中没有,就是已交费。

如 13008717797 李志敏 这条记录

删除这条记录,把这个表添加到 已交费表 Handed


**********************************************************************

不知大家有什么好思路?
我本来想都读取程序里进行循环对比的,但是这样可能程序运行会慢得多。内存占用太大。
最好尽量能使用 SQL 语句实现。

bow


...全文
192 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
暗石绿 2004-08-30
  • 打赏
  • 举报
回复
顶上一顶
暗石绿 2004-08-28
  • 打赏
  • 举报
回复
呵呵,这要做的是 手机的欠费追缴
每到月底,联通要用联创做的系统导出一个excel格式的 欠费清单。
我要进行数据的对比
yuncai 2004-08-28
  • 打赏
  • 举报
回复
哥,这么多,看都看晕了
Heqikun 2004-08-28
  • 打赏
  • 举报
回复
这个SQL语句的实现倒没什么,只是这样的设计实在麻烦.不知道原来是什么样的业务需求?
暗石绿 2004-08-28
  • 打赏
  • 举报
回复
这是我写的

-- 未交费 (欠费金额相等,即是未交费的)
select * from TempArrearageList where exists (select * from ArrearageList where ArrearageList.mphonecode=TempArrearageList.mphonecode and ArrearageList.usrname=TempArrearageList.usrname and ArrearageList.feesumdeb=TempArrearageList.feesumdeb)

-- 部分交费 (欠费金额不相等,即是部分交费的)
select * from TempArrearageList where exists (select * from ArrearageList where ArrearageList.mphonecode=TempArrearageList.mphonecode and ArrearageList.usrname=TempArrearageList.usrname and ArrearageList.feesumdeb<>TempArrearageList.feesumdeb)

-- 新增欠费

-- A 手机号完全不在旧数据中
select * from TempArrearageList where not exists (select * from ArrearageList where ArrearageList.mphonecode=TempArrearageList.mphonecode)

-- B 手机号在旧数据中,可 usrname <> 旧数据中的usrname
select * from TempArrearageList where exists (select * from ArrearageList where ArrearageList.mphonecode=TempArrearageList.mphonecode and ArrearageList.usrname<>TempArrearageList.usrname)

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧