select CurrentBucket = 
CASE WHEN 
(CASE receive WHEN '0' THEN datediff(dd, PaymentDate, getdate()) 
             WHEN '1' THEN datediff(dd, DueDate, getdate()) 
      END) between 1 and 29 
THEN amount 
ELSE 0 
END
from mytable或
select CurrentBucket = 
CASE WHEN 
  receive* datediff(dd, PaymentDate, getdate()) 
  +(1-receive)* datediff(dd, DueDate, getdate())  between 1 and 29 
THEN amount 
ELSE 0 
END
from mytable

解决方案 »

  1.   

    select CurrentBucket = 
    ceiling(receive* datediff(dd, PaymentDate, getdate()) 
      +(1-receive)* datediff(dd, DueDate, getdate())/30.0)*amount 
    from mytable
      

  2.   

    啊压,有个between的,偶居然忘了,真是蠢到家了。
    receive是bit类型的,能用第二种方法吗?
    我来试试!
      

  3.   

    to: icevi
    非常感谢。不过你的第三个方法是不对的。但是思路我知道了。
    我会给分的另外,还想请教一下,你认为case效率高还是使用这种运算效率高?因为我需要做多个类似的字段。
      

  4.   

    第三个为什么不对?我没有测试的,你说说看?关于效率还真不知道到底哪个高。实际试一下吧。好象没觉得CASE很慢,就是看起来罗嗦了点。
      

  5.   

    来自DEJIAN SUNDERIC:
    同CASE过多会影响SQL的效率,追好用IF不过我写的时候,感觉区别不大。
      

  6.   

    好的,我采用一个case,一个运算。
    给分!