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

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -