Foxtable(狐表)用户栏目专家坐堂 → 用一条sql语句如何统计出全年的租金?


  共有2305人关注过本帖树形打印复制链接

主题:用一条sql语句如何统计出全年的租金?

帅哥哟,离线,有人找我吗?
sloyy
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2193 积分:13902 威望:0 精华:2 注册:2012/2/25 10:59:00
用一条sql语句如何统计出全年的租金?  发帖心情 Post By:2018/10/20 16:13:00 [显示全部帖子]

合同号码 合同起始日期 合同截止日期 月租金
201801 2018-01-01 2019-12-31 100
201802 2017-11-01 2018-10-31 200
201803 2017-01-01 2018-03-31 300
201803 2018-04-04 2018-11-31 400
2018年1-12月,月租金合计数
合同号码 月租金合计 备注
201801 1200 12*100
201802 2000 10*100
201803 4100 3*300+8*400

如何用一条sql语句统计出每个合同号码1-12月的月租金合计?

 回到顶部
帅哥哟,离线,有人找我吗?
sloyy
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2193 积分:13902 威望:0 精华:2 注册:2012/2/25 10:59:00
  发帖心情 Post By:2018/10/20 21:25:00 [显示全部帖子]

不对,你这是整个表统计,这个不难。  
现在难点就在于: 合同的统计时段被限制在2018-1-1 到2018-12=31日,
而有些合同 起始日期是在2018-1-1 之前,有些截止日期是在2018-12-31 之后,而有些合同分成了2段。这才是难点

 回到顶部
帅哥哟,离线,有人找我吗?
sloyy
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2193 积分:13902 威望:0 精华:2 注册:2012/2/25 10:59:00
  发帖心情 Post By:2018/10/21 13:47:00 [显示全部帖子]

我采用了一个办法: 全年12个月 减去1月后起租的月份,减去12月前止租的月份
s elect 合同号码,月租金,(12+sum(case when 合同起始日期>'2018-01-01' then DateDiff(m,合同起始日期, '2018-01-01') else 0 end )+sum(case when 合同截止日期<'2018-12-31' then DateDiff(m, '2018-12-31',合同截止日期) else 0 end ))*月租金 as 月租金合计 from {租金明细}  group by 合同号码,月租金

得出了结果: 

合同号码 月租金 月租金合计
201801 100 1200
201802 200 2000
201803 300 900
201803 400 3200

还要再做一次分组合计,才能得出正确的结果 上面这个sql语句还要怎么改,才能一次就达到目的?  也就是说二次分组汇总
[此贴子已经被作者于2018/10/21 13:59:41编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
sloyy
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2193 积分:13902 威望:0 精华:2 注册:2012/2/25 10:59:00
  发帖心情 Post By:2018/10/21 15:09:00 [显示全部帖子]

s elect 合同号码, sum(月租金合计) as 总租金 from (s elect 合同号码,月租金,(12+sum(case when 合同起始日期>'2018-01-01' then DateDiff(m,合同起始日期, '2018-01-01') else 0 end )+sum(case when 合同截止日期<'2018-12-31' then DateDiff(m, '2018-12-31',合同截止日期) else 0 end ))*月租金 as 月租金合计 from {租金明细} a group by 合同号码,月租金) as a group by 合同号码
合同号码 月租金合计
201801 1200
201802 2000
201803 4100

搞定!!! 谢谢大家 

 回到顶部