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
Post a Comment