当前位置: 代码迷 >> Sql Server >> 初学者问下能不能将费用平均分摊到用户使用的每个月
  详细解决方案

初学者问下能不能将费用平均分摊到用户使用的每个月

热度:66   发布时间:2016-04-24 09:38:10.0
菜鸟问下能不能将费用平均分摊到用户使用的每个月
表的数据如下

用户名    开始时间         结束时间       总金额
李捷      2014-2-15      2014-7-14    150
张剑      2014-5-20      2014-6-19    25
吴勇金    2014-1-15      2014-3-14    50

能不能根据用户的开始时间将费用平均分摊到使用的每一个月
用户名    开始时间         结束时间       总金额    1月  2月  3月  4月  5月   6月   7月   8月
李捷      2014-2-15      2014-8-14     150    0    25   25  25   25   25   25    25
张剑      2014-5-20      2014-6-19     25     0    0    0   0    25   0    0     0
吴勇金    2014-1-15      2014-3-14     50     25  25    0   0    0    0    0     0
------解决思路----------------------
总觉得你的均摊不严紧
SELECT 用户名,开始时间,结束时间,总金额
,CASE WHEN 1 BETWEEN StartMonth AND EndMonth THEN AvgMonty END[1月]
,CASE WHEN 2 BETWEEN StartMonth AND EndMonth THEN AvgMonty END[2月]
,CASE WHEN 3 BETWEEN StartMonth AND EndMonth THEN AvgMonty END[3月]
,CASE WHEN 4 BETWEEN StartMonth AND EndMonth THEN AvgMonty END[4月]
,CASE WHEN 5 BETWEEN StartMonth AND EndMonth THEN AvgMonty END[5月]
,CASE WHEN 6 BETWEEN StartMonth AND EndMonth THEN AvgMonty END[6月]
,CASE WHEN 7 BETWEEN StartMonth AND EndMonth THEN AvgMonty END[7月]
,CASE WHEN 8 BETWEEN StartMonth AND EndMonth THEN AvgMonty END[8月]
FROM(
SELECT *
,DATEPART(MONTH,开始时间)StartMonth
,CASE WHEN DATEDIFF(MONTH,开始时间,结束时间)=0 THEN MONTH(结束时间)
ELSE DATEPART(MONTH,结束时间)-1 END EndMonth
,总金额/CASE WHEN DATEDIFF(MONTH,开始时间,结束时间)=0 THEN 1
ELSE DATEDIFF(MONTH,开始时间,结束时间)END AvgMonty
FROM TB
)T
  相关解决方案