100分求一个case sql语句的简化!

KnowLittle 2002-04-18 10:18:52
加精
select CurrentBucket = CASE WHEN
CASE receive WHEN '0' THEN datediff(dd, PaymentDate, getdate())
WHEN '1' THEN datediff(dd, DueDate, getdate())
END < 30
AND
CASE receive WHEN '0' THEN datediff(dd, PaymentDate, getdate())
WHEN '1' THEN datediff(dd, DueDate, getdate())
END > 0
THEN amount
ELSE 0
END
from mytable

因为有两个条件,<30and>0,并且里面的判断条件也随一个字段不同而不同。
这个语句已经成功,而且是正确地。
但是因为有多个bucket类型需要统计,
我觉得语句过于复杂,不知道谁知道能否简化一下,尤其那个and号连接的内容
...全文
42 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuganyihao 2002-04-19
  • 打赏
  • 举报
回复
按扭工厂,
能说清楚点吗?
帮个忙
我是菜鸟。。
KnowLittle 2002-04-18
  • 打赏
  • 举报
回复
好的,我采用一个case,一个运算。
给分!
leimin 2002-04-18
  • 打赏
  • 举报
回复
来自DEJIAN SUNDERIC:
同CASE过多会影响SQL的效率,追好用IF

不过我写的时候,感觉区别不大。
icevi 2002-04-18
  • 打赏
  • 举报
回复
哦~~~~我知道怎么不对了:D
icevi 2002-04-18
  • 打赏
  • 举报
回复
第三个为什么不对?我没有测试的,你说说看?

关于效率还真不知道到底哪个高。实际试一下吧。好象没觉得CASE很慢,就是看起来罗嗦了点。
KnowLittle 2002-04-18
  • 打赏
  • 举报
回复
to: icevi
非常感谢。不过你的第三个方法是不对的。但是思路我知道了。
我会给分的

另外,还想请教一下,你认为case效率高还是使用这种运算效率高?因为我需要做多个类似的字段。
mmzxg 2002-04-18
  • 打赏
  • 举报
回复
o,i come latly
KnowLittle 2002-04-18
  • 打赏
  • 举报
回复
啊压,有个between的,偶居然忘了,真是蠢到家了。
receive是bit类型的,能用第二种方法吗?
我来试试!
icevi 2002-04-18
  • 打赏
  • 举报
回复
select CurrentBucket =
ceiling(receive* datediff(dd, PaymentDate, getdate())
+(1-receive)* datediff(dd, DueDate, getdate())/30.0)*amount
from mytable

icevi 2002-04-18
  • 打赏
  • 举报
回复
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

KnowLittle 2002-04-18
  • 打赏
  • 举报
回复
是在sql server里面的
KnowLittle 2002-04-18
  • 打赏
  • 举报
回复
在线等!

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧