求一条SQL语句

zwfgdlc 2014-08-14 08:17:30

这是一个会员充值记录表,有时收银会充错,收银系统有个退钱的功能,就是插入一条负数的数据来实现的,如果图所示。
我现在遇到的问题是在统计充值记录时,怎么把这样的数据剔除掉。
...全文
201 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2014-08-15
  • 打赏
  • 举报
回复
加个冲销标志字段,默认为0。
如果写入-100,看非当前的最新时间中是否有+100的:
  有——就设两条记录的 冲销标志=1
  没有——没有匹配的记录,不许写入-100。
用程序或触发器实现均可。

查询统计时只要加上条件 冲销标志=0,不用实时匹配冲销,性能没影响。
knife_s 2014-08-15
  • 打赏
  • 举报
回复
你在表格的设计中考虑不全面,既然是充负值,就要有来源, 也就是说,1,你要有充值单据流水号,2,在充负值的时候,要提供来源号(充错流水单号) 这样一来,退款有据可查,统计也更方便 如果是自己写的程序,考虑下改程序,如果不是,用触发器来解决下试试看
习惯性蹭分 2014-08-14
  • 打赏
  • 举报
回复

 select identity(int,1,1) as id,*
 into #tmp
 from record
 
select * from #tmp t
where not exists(
select 1 from #tmp where sCardID=t.sCardID
and cRemain+t.cRemain=0 and cRemainBefore=cRemainAfter and id<>t.id
)
习惯性蹭分 2014-08-14
  • 打赏
  • 举报
回复

 select identity(int,1,1) as id,*
 into #tmp
 from record
 
select * from #tmp t
where not exists(
select 1 from #tmp where sCardID=t.sCardID
and cRemain+t.cRemain=0 and cRemainBefore=cRemainAfter
)
没测试数据,你测下看行不行。
--小F-- 2014-08-14
  • 打赏
  • 举报
回复
delete t from tb t where exists(select 1 from tb where scardid=t.scardid and cRemain<>t.cremain )
--小F-- 2014-08-14
  • 打赏
  • 举报
回复
delete t from tb t where exists(select 1 from tb where scardid=t.scardid and cRemain<>t.cremain and dttime=t.dtime)

34,838

社区成员

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

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