我有一个大表(1 mio行)并且有这个查询:
Select ...,
case
when datediff(day,getdate())<30 then 'Month'
when datediff(day,getdate())<90 then 'Quater"
when datediff(day,getdate())<365 then 'YEAR'
else 'OLD' END
....
如何阻止它为每个旧行执行该函数三次.. ??
我喜欢像
这样的东西case datediff(day,getdate())
when between 0 and 30 then 'month'
when between 31 and 90 then...
答案 0 :(得分:2)
你确定dateiff() - 函数会重复n次吗?优化器应该足够聪明才能看到这一点。
除此之外,您始终可以为查询中的每一行计算datediff
,并在外部查询中应用case
。
select ..., case when a.my_diff ..., ... from (
select ..., datediff(...) as 'my_diff', ... from ...
) a