sql server 2008 - Create multiple rows from single row sql -
i have table structure like
atm ticket open time ticket closed time m30g324202 17-02-2013 06:15 19-02-2013 20:54 m30g324202 28-02-2013 21:00 01-03-2013 11:18 m30g324203 27-02-2013 19:10 28-02-2013 07:14 m30g324203 28-02-2013 07:15 28-02-2013 11:18 if ticket open time or ticket closed time lies between '20:00:00' , '06:00:00' i.e. 8 pm & 6 new row should created not have time frame
e.g. first row in above table
atm ticket open time ticket closed time m30g324202 17-02-2013 06:15 17-02-2013 20:00 m30g324202 18-02-2013 06:00 18-02-2013 20:00 m30g324202 19-02-2013 06:00 19-02-2013 20:00 //above 1st row //second row change follows m30g324202 01-03-2013 06:00 01-03-2013 11:18 (time 28-02-2013 21:00 neglected till next day morning 6 after 8 pm ) //third row change follows m30g324203 27-02-2013 19:10 27-02-2013 20:00 m30g324203 28-02-2013 06:00 28-02-2013 07:14 //fourth row change follows m30g324203 28-02-2013 07:15 28-02-2013 11:18 (no change is) i have written 20:00 instead of 20:54 because 54 min. after 8 pm 19th feb.
a great question! please check try:
declare @tbl table (atm nvarchar(20), ticketopentime datetime, ticketclosedtime datetime) insert @tbl values ('m30g324202', '02-17-2013 06:15', '02-19-2013 20:54'), ('m30g324202', '02-28-2013 21:00', '03-01-2013 11:18'), ('m30g324203', '02-27-2013 19:10', '02-28-2013 07:14'), ('m30g324203', '02-28-2013 07:15', '02-28-2013 11:18') declare @min datetime, @max datetime select @min = min(ticketopentime), @max = max(ticketclosedtime) @tbl ;with t as( select convert(datetime, convert(numeric(20), @min, 101)) dt union select dt+1 t dt<@max ) select a.atm, case when a.ticketopentime>dt1 a.ticketopentime else dt1 end ticketopentime, case when a.ticketclosedtime>dt2 dt2 else a.ticketclosedtime end ticketclosedtime @tbl cross apply( select dt, dateadd(minute, 360, dt) dt1, dateadd(minute, 1200, dt) dt2 t b dt between cast(a.ticketopentime date) , cast(a.ticketclosedtime date) )x a.ticketopentime<=x.dt2 order a.atm, a. ticketopentime
Comments
Post a Comment