sql server - How can I eliminate the duplicate subqueries? -
how can eliminate duplicate subqueries?
sdpddj - (select ibopv testdta.f4102 iblitm = sdlitm , ibmcu = sdmcu )
from following query below:
declare @opv int declare @today_jd int declare @dayofweek int set @today_jd = dbo.date2jde (convert(varchar(10),getdate(),111)) --today in julian set @dayofweek = datepart(dw, dbo.jde2date(@today_jd)) -- day of week (1 7) update testdta.f4211 set sdvr03 = 1 testdta.f4211 sdkcoo = 30001 , sdsrp1 = 'ito' , sdsobk > 0 , sdvend > '' , sddoco = 2606544 , sdlnid = 27000 , case when ((sdpddj - (select ibopv testdta.f4102 iblitm = sdlitm , ibmcu = sdmcu ) >= @today_jd) , (@dayofweek = 2) , (sdvend= 1010 or sdvend=4010)) 1 when ((sdpddj - (select ibopv testdta.f4102 iblitm = sdlitm , ibmcu = sdmcu ) >= @today_jd) , (@dayofweek = 3) , (sdvend= 110051 or sdvend=110052 or sdvend = 2010)) 1 when ((sdpddj - (select ibopv testdta.f4102 iblitm = sdlitm , ibmcu = sdmcu ) >= @today_jd) , (@dayofweek = 4) , (sdvend= 50001)) 1 when ((sdpddj - (select ibopv testdta.f4102 iblitm = sdlitm , ibmcu = sdmcu ) >= @today_jd) , (@dayofweek = 5) , (sdvend= 110034)) 1 else 0 end = 1
simple really, remove case clauses , put directly clause. if not true, branches of case statement goes false -> ends case else -> 0 won't match = 1
@ end. take outside of case.
declare @opv int declare @today_jd int declare @dayofweek int set @today_jd = dbo.date2jde (convert(varchar(10),getdate(),111)) --today in julian set @dayofweek = datepart(dw, dbo.jde2date(@today_jd)) -- day of week (1 7) update testdta.f4211 set sdvr03 = 1 testdta.f4211 sdkcoo = 30001 , sdsrp1 = 'ito' , sdsobk > 0 , sdvend > '' , sddoco = 2606544 , sdlnid = 27000 , (sdpddj - (select ibopv testdta.f4102 iblitm = sdlitm , ibmcu = sdmcu ) >= @today_jd) , case when (@dayofweek = 2) , sdvend in (1010,4010) 1 when (@dayofweek = 3) , sdvend in (110051,110052,2010) 1 when (@dayofweek = 4) , sdvend= 50001) 1 when (@dayofweek = 5) , sdvend= 110034) 1 else 0 end = 1
i go further , drop case statement completely
declare @opv int declare @today_jd int declare @dayofweek int set @today_jd = dbo.date2jde (convert(varchar(10),getdate(),111)) --today in julian set @dayofweek = datepart(dw, dbo.jde2date(@today_jd)) -- day of week (1 7) update testdta.f4211 set sdvr03 = 1 testdta.f4211 sdkcoo = 30001 , sdsrp1 = 'ito' , sdsobk > 0 , sdvend > '' , sddoco = 2606544 , sdlnid = 27000 , ((sdpddj - (select ibopv testdta.f4102 iblitm = sdlitm , ibmcu = sdmcu ) >= @today_jd) , ( ((@dayofweek = 2) , sdvend in (1010,4010)) or ((@dayofweek = 3) , sdvend in (110051,110052,2010)) or ((@dayofweek = 4) , (sdvend= 50001)) or ((@dayofweek = 5) , (sdvend= 110034)) )
Comments
Post a Comment