sum求和时怎样去重复值?

xBoady 2010-09-30 03:35:35
SELECT SUM(DISTINCT CASE WHEN BG_BG_Type =2 THEN ISNULL(b.BG_Freight,0.00)-ISNULL(a.BG_Freight,0.00) WHEN BG_BG_Type=3 THEN ISNULL(BG_DCharge,0.00) ELSE 0 END) FROM BA_Bargain a LEFT JOIN BG_Bargain b ON a.BGID=b.BGID AND a.BG_OP_Time>='2010-09-26' AND a.BG_OP_Time<'2010-10-26' AND b.BG_TNode='100625' AND (BG_BG_Type=2 or BG_BG_Type=3)
现在执行的效果是:((10+30+40)-(15+30+40))+((20+6+1)-(5+6+1))
我想要原始运费为第一次的,原始送货费为第二次的,也就是说原始运费是第一次修改的,送货费是最后一次修改的记录。。。?DISTINCT是不是只能去第一次的。。。

BA_Bargain(变更原始表)
BGID , BG_Freight (变更前的运费) ,BG_DCharge(原始送货费), BG_OP_Time
001 , 10 ,20,2010-09-26 01:00:00 (第一次)
001 , 11 ,10,2010-09-26 01:59:59 ( 第二次,然而没有变化)
002 , 30 ,6,2010-09-26 02:33:00
003 , 40 ,1,2010-09-26 03:00:00
BG_Bargain(变更后表)
BGID , BG_Freight(变更后的运费),BG_DCharge
001 , 15,5
002 , 30,6
003 , 40,1
...全文
332 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ya_Pian 2010-09-30
  • 打赏
  • 举报
回复
先去重复再求和啦
SQLCenter 2010-09-30
  • 打赏
  • 举报
回复
云里来雾里去
xBoady 2010-09-30
  • 打赏
  • 举报
回复
想要的效果是:((10+30+40)-(15+30+40))+((10+6+1)-(5+6+1))
xBoady 2010-09-30
  • 打赏
  • 举报
回复
BA_Bargain(变更原始表)
BGID,BG_OP_Time,BG_SNode,BG_TNode,BG_Freight,BG_DCharge,BG_BG_Type

BG_Bargain(变更后表)
BGID,BG_SNode,BG_TNode,BG_Freight,BG_DCharge,BG_BG_Type

具体的表结构是这样子的。。。变更原始表是最原始的数据(变更前的数据)
飘零一叶 2010-09-30
  • 打赏
  • 举报
回复
乱啊对方答复
百年树人 2010-09-30
  • 打赏
  • 举报
回复
请提供表结构,测试数据,算法和你想要的结果

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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