以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 用一条sql语句如何统计出全年的租金? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=126401) |
||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:sloyy -- 发布时间:2018/10/20 16:13:00 -- 用一条sql语句如何统计出全年的租金?
如何用一条sql语句统计出每个合同号码1-12月的月租金合计?
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2018/10/20 16:23:00 -- 试试 select 合同号码,sum(月租金) from (select 合同号码, DateDiff(m, 合同起始日期, 合同截止日期) * 月租金 as 月租金 from 表A) as a group by 合同号码
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:sloyy -- 发布时间:2018/10/20 21:25:00 -- 不对,你这是整个表统计,这个不难。 现在难点就在于: 合同的统计时段被限制在2018-1-1 到2018-12=31日, 而有些合同 起始日期是在2018-1-1 之前,有些截止日期是在2018-12-31 之后,而有些合同分成了2段。这才是难点
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:cd_tdh -- 发布时间:2018/10/21 9:34:00 -- 不难啊,你自定义统计那一年,自己选择不就行了,如果只统计当年,直接获取当面的日期,取年不就可以了啊。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:有点甜 -- 发布时间:2018/10/21 12:44:00 -- 以下是引用sloyy在2018/10/20 21:25:00的发言:
不对,你这是整个表统计,这个不难。 现在难点就在于: 合同的统计时段被限制在2018-1-1 到2018-12=31日,
而有些合同 起始日期是在2018-1-1 之前,有些截止日期是在2018-12-31 之后,而有些合同分成了2段。这才是难点
1、假定统计2018年的数据;
2、2018年1月1日大于起始日期,取2018-1-1,否则,取起始日期;
3、2019年1月1日小于结束日期,取2019-1-1,否则,取结束日期;
4、从2、3中得到日期,直接相减,计算月数或者日数,乘以每月、每日的租金即可得到;
5、最后把所有租金sum起来。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:sloyy -- 发布时间: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 合同号码,月租金得出了结果:
还要再做一次分组合计,才能得出正确的结果 上面这个sql语句还要怎么改,才能一次就达到目的? 也就是说二次分组汇总 [此贴子已经被作者于2018/10/21 13:59:41编辑过]
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:有点甜 -- 发布时间:2018/10/21 14:52:00 -- 再写一个select语句即可,比如
select 合同号码, sum(月租金) as 总租金 from (本来的sql语句) as a group by 合同号码 |
||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:sloyy -- 发布时间: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 合同号码
搞定!!! 谢谢大家
|