sql - Loop vs Union all -


i'm trying learn advanced techniques. have following query executes monthly disenrollment information of '(date)' union alls.

is there shorter way of doing this? executing take long time.

thanks!

select left((datename(mm, me.statedisenrolldate)),3) reportedmonth, me.statedisenrolldate, me.reinstatementdate, me.memberid, dis.dri_name, case     when me.reinstatementdate null 'disenrolled'     else 'reinstated' end status tblmemenrollment me left join tlkpdisenrolreasinvestigated dis on dis.disenrolreasinvestigid = me.disenrolrsninvstgtdid me.statedisenrolldate between '1-1-2015' , '1/31/2015' , me.reinstatementdate null or me.reinstatementdate between '1/1/2015' , '1/31/2015' , subscriberid '%h%'  union  select left((datename(mm, me.statedisenrolldate)),3) reportedmonth, me.statedisenrolldate, me.reinstatementdate, me.memberid, dis.dri_name, case     when me.reinstatementdate null 'disenrolled'     else 'reinstated' end status tblmemenrollment me left join tlkpdisenrolreasinvestigated dis on dis.disenrolreasinvestigid = me.disenrolrsninvstgtdid me.statedisenrolldate between '2-1-2015' , '2/28/2015' , me.reinstatementdate null or me.reinstatementdate between '2/1/2015' , '2/28/2015' , subscriberid '%h%'  union  select left((datename(mm, me.statedisenrolldate)),3) reportedmonth, me.statedisenrolldate, me.reinstatementdate, me.memberid, dis.dri_name, case     when me.reinstatementdate null 'disenrolled'     else 'reinstated' end status tblmemenrollment me left join tlkpdisenrolreasinvestigated dis on dis.disenrolreasinvestigid = me.disenrolrsninvstgtdid me.statedisenrolldate between '3-1-2015' , '3/31/2015'  , me.reinstatementdate null or me.reinstatementdate between '3/1/2015' , '3/31/2015' , subscriberid '%h%'   union  select left((datename(mm, me.statedisenrolldate)),3) reportedmonth, me.statedisenrolldate, me.reinstatementdate, me.memberid, dis.dri_name, case     when me.reinstatementdate null 'disenrolled'     else 'reinstated' end status tblmemenrollment me left join tlkpdisenrolreasinvestigated dis on dis.disenrolreasinvestigid = me.disenrolrsninvstgtdid me.statedisenrolldate between '4/1/2015' , '4/30/2015' , me.reinstatementdate null or me.reinstatementdate between '4/1/2015' , '4/30/2015' , subscriberid '%h%'   union  select left((datename(mm, me.statedisenrolldate)),3) reportedmonth, me.statedisenrolldate, me.reinstatementdate, me.memberid, dis.dri_name, case     when me.reinstatementdate null 'disenrolled'     else 'reinstated' end status tblmemenrollment me left join tlkpdisenrolreasinvestigated dis on dis.disenrolreasinvestigid = me.disenrolrsninvstgtdid me.statedisenrolldate between '5-1-2015' , getdate() , me.reinstatementdate null or me.reinstatementdate between '5/1/2015' , getdate() , subscriberid '%h%' 

you got same column list , same joins, different where-conditions, combine them using or:

select left((datename(mm, me.statedisenrolldate)),3) reportedmonth, me.statedisenrolldate, me.reinstatementdate, me.memberid, dis.dri_name, case     when me.reinstatementdate null 'disenrolled'     else 'reinstated' end status tblmemenrollment me left join tlkpdisenrolreasinvestigated dis on dis.disenrolreasinvestigid = me.disenrolrsninvstgtdid (me.statedisenrolldate between '1-1-2015' , '1/31/2015' , me.reinstatementdate null or me.reinstatementdate between '1/1/2015' , '1/31/2015' , subscriberid '%h%')  or   ( me.statedisenrolldate between '2-1-2015' , '2/28/2015' , me.reinstatementdate null or me.reinstatementdate between '2/1/2015' , '2/28/2015' , subscriberid '%h%')  or   ( me.statedisenrolldate between '3-1-2015' , '3/31/2015'  , me.reinstatementdate null or me.reinstatementdate between '3/1/2015' , '3/31/2015' , subscriberid '%h%')  or   ( me.statedisenrolldate between '4/1/2015' , '4/30/2015' , me.reinstatementdate null or me.reinstatementdate between '4/1/2015' , '4/30/2015' , subscriberid '%h%')  or   ( me.statedisenrolldate between '5-1-2015' , getdate() , me.reinstatementdate null or me.reinstatementdate between '5/1/2015' , getdate() , subscriberid '%h%') 

but bet not correct result, you're mixing and , or without brackets. hint: order of precedence and first , or.


Comments

Popular posts from this blog

Email notification in google apps script -

c++ - Difference between pre and post decrement in recursive function argument -

javascript - IE11 incompatibility with jQuery's 'readonly'? -