日期:2014-05-17  浏览次数:20405 次

求一个sql,等大神判断年月份
select Number400,_year ,_Month ,FeeType, a_FixedFee ,FeeTypeName,Fee1,Fee2,Fee3,Fee4,
Consumer1,Consumer2,Consumer3,Consumer4,DXEffectDate,
case when rec>a_FixedFee 
then rec else a_FixedFee end as rec,
case when pay>c_FixedFee then pay else c_FixedFee end as pay,
case when rec>a_FixedFee then rec else a_FixedFee end-case when 
pay>c_FixedFee then pay else c_FixedFee end as 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



如下图 我2013年9月份实际应收的价格应该是330元,要判断一下 我DXEffectDate日期是否小于年份和月份 如果大于的话 就显示实际的价格 要是小于才按着抵消和实际
打的费用  我想着通过datepart(yyyy,DXEffectDate)得到年和datepart(mm,DXEffectDate)得到月份去比较_year和month值 
sql select

------解决方案--------------------
用函数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&