求一SQL语句!!!

ChinaTek 2013-12-31 02:31:50

客户表
客户ID,客户欠款天数
C01 9

销售表
销售流水ID,业务员ID,客户ID,销售日期, 销售产品ID,进货单价,销售单价,销售数量,销售金额
S001 Y01 C01 2013-11-1 P01 50 60 100 6000
S001 Y01 C01 2013-11-2 P01 45 55 100 5500

收款表
收款表流水ID,销售流水ID,收款日期,收款金额
A001 S001 2013-11-5 3000
A002 S001 2013-11-8 1000
A003 S001 2013-11-10 800
A003 S001 2013-12-2 1200

统计每个业务员每个月的以下数据

业务员ID 月份 有效收款 销售提成
Y001 2013-11 4000
Y001 2013-12

有效收款=收款日期-销售日期 《= 客户的欠款天数
销售提成= if 收款日期-销售日期
<= 10 THEN (收款金额 - 成本)* 2% 成本
> 10 (收款金额 - 成本) * 2% 此时成本(进货单价+5)

...全文
202 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChinaTek 2014-01-06
  • 打赏
  • 举报
回复
lynchhei==>是可以分批付款的! 但分批付款时提成的算法好像没有哇!==》是计算收到款部分的提成就好了~!
giftzheng 2013-12-31
  • 打赏
  • 举报
回复
select a.业务员ID,convert(varchar(10),a.收款日期,120),sum(收款金额) as 有效收款, case when datediff(day,min(b.销售日期),max(a.收款日期))<=10 then sum(收款金额)-sum(进货单价*销售数量) else sum(收款金额)-sum((进货单价+5)*销售数量) end as 销售提成 from 收款表 a join 销售表 b on a.销售流水ID=b.销售流水ID group by a.业务员ID,convert(varchar(10),a.收款日期,120)
lynchhei 2013-12-31
  • 打赏
  • 举报
回复
给点提示吧! CONVERT([char](7),收款日期,(21)) 可以得到你要的 月份 DATEDIFF(Day, 销售日期, 收款日期) 可以得到你要的 付款天数 天数条件的判断 可以用 CASE WHEN 来实现。
lynchhei 2013-12-31
  • 打赏
  • 举报
回复
to 1L: 可以用 "销售流水ID" 来关联! to LZ: 从你的《收款表》来看,是一个单子可以分批付款的。 但分批付款时提成的算法好像没有哇!
KeepSayingNo 2013-12-31
  • 打赏
  • 举报
回复
你这个收款表有问题吧,至少应该还差一个“销售日期”字段,否则和销售表没办法关联

34,589

社区成员

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

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