如何把加了Case的某列,作为变量使用?

linjiangxian11 linjiangxian11 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
合同表(ContractTable)中有合同起始日(LeaseDateFrom)和合同终止日(LeaseDateTo)。一般来说合同期限整年整年的,那么LeaseDateFrom和 LeaseDateTo之间的日期相差1年、2年、3年。。。。。。


现在出现了特殊情况,例如:LeaseDateFrom是2017-5-1,LeaseDataTo是2018-12-31,相差不是整年。




我希望如果两个日期相差不是整年的时候,给LeaseDateFrom加一个Case,变成新的一列“time1”,让这个time1增加到和LeaseDateTo保持相差是整年的关系。

也就是我把LeaseDateFrom (2017-5-1)用time1代替。time1的值经过Case的运算后为2017-1-1,这样time1和 LeaseDateTo之间相差正好又是整年了,之后就用time1取代LeaseDateFrom进行运算。



============问题================


因为我的SQL语句中含有海量的这种time1,如果全部都傻傻的每次都用Case判断一次,代码需要写几千行。


因此,我觉得应该把time1先以变量的形式,声明在SQL语句的最开头。


然而,图1中的time1并不能把象变量或字段那样直接在 SQL中使用,否则就会出现错误提示:“列名time1无效”。请问该如何处理呢?




=============代码=====================
select 
(case
when DATEDIFF (MONTH,LeaseDateFrom,DATEADD(day,1,LeaseDateTo))%12 =0
then LeaseDateFrom
else DATEADD(YEAR,-(DATEDIFF (MONTH,LeaseDateFrom,DATEADD(day,1,LeaseDateTo))/12+1),DATEADD

(DAY,1,LeaseDateTo))
end) as time1

,LeaseDateFrom
,LeaseDateTo
,DATEDIFF (MONTH,time1,DATEADD(day,1,LeaseDateTo)) as 'time1到LeaseDateTo的月份'
,DATEDIFF (MONTH,LeaseDateFrom,DATEADD(day,1,LeaseDateTo)) as 'LeaseDateFrom到LeaseDateTo的月份'

from ContractTable


============图1================

...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
linjiangxian11
MS-SQL Server 34,876 成员 254,635 内容