求一个sql,等大神判断年月份
如下图 我2013年9月份实际应收的价格应该是330元,要判断一下 我DXEffectDate日期是否小于年份和月份 如果大于的话 就显示实际的价格 要是小于才按着抵消和实际
打的费用 我想着通过datepart(yyyy,DXEffectDate)得到年和datepart(mm,DXEffectDate)得到月份去比较_year和month值 用函数convert()
convert(varchar(7),DXEffectDate,120)
select convert(varchar(7),getdate(),120)
得到格式
/*
2013-10 -->以这种格式去判断
*/
[解决办法]
改成>有用不?
[解决办法]
我把外层的2个case when简化了一下:
select Number400,_year ,_Month , a_FixedFee ,FeeTypeName,
Fee1,Fee2,Fee3,Fee4,
Consumer1,Consumer2,Consumer3,Consumer4,DXEffectDate,
case when (datepart(yy,DXEffectDate) >=_year
and datepart(mm,DXEffectDate) > _Month)
or (rec>a_FixedFee)
then rec
else a_FixedFee
end as rec,
-->rec字段
case when pay>c_FixedFee then pay else c_FixedFee end as pay, -->pay字段
case when (datepart(yy,DXEffectDate) >=_year
and datepart(mm,DXEffectDate) > _Month)
or rec>a_FixedFee
then rec
else a_FixedFee
end - case when pay>c_FixedFee then pay else c_FixedFee end as profit -->profit字段
from
(
select a.Number400,b._year ,b._Month ,a.FeeType,
a.FixedFee as a_FixedFee,a.DXEffectDate,a.FeeTypeName,
a.Fee1,a.Fee2,a.Fee3,a.Fee4,
b.Consumer1,b.Consumer2,b.Consumer3,b.Consumer4,
c.FixedFee as c_FixedFee,
case a.FeeType
when 1 then a.Fee1*b.Consumer1+a.Fee2*b.Consumer2
when 2 then a.Fee3*b.Consumer3+a.Fee4*b.Consumer4
end as rec,
case c.FeeType
when 1 then c.Fee1*b.Consumer1+c.Fee2*b.Consumer2
when 2 then c.Fee3*b.Consumer3+c.Fee4*b.Consumer4
end as pay
from S_SaleManager a
inner join S_MonthlyData b on a.Number400=b.Number400
inner join S_Manager400 c on b.Number400=c.Number400
) t
where t._year=2013 and t._Month=10