create table T_Event
(
EventID int identity primary key,
EventStartDate varchar(20),
EventStartHour varchar(10),
EventStartMinute varchar(10),
EventEndDate varchar(20),
EventEndHour varchar(10),
EventEndMinute varchar(10),
EventTitle varchar(30),
EventLocation varchar(30),
EventDescription varchar(250),
PubUserName varchar(30),
SubUserName varchar(30)
)
go在存数据的时候,有2种方式,一种是存单独一天的,另一种是存连续几天的数据(除了EventId和EventStartDate,EventendDate之外,其他字段都相同)
现在取数据需要建立的存储过程有下面3个参数:
@eventStartDate varchar(20),@pubUserName varchar(30),@subUserName varchar(30)返回一个数据集,条件是符合EventStartDate = @eventStartDate and PubUserName = @pubUserName and SubUserName = @subUserName
的所有记录,以及在这些记录中,向前,向后一天有则相同性质的连续记录(如果有则继续向前,向后一天,没有则停止.一定要连续的,隔一天才相同的不算)
如数据库有以下记录246 2007-11-18 9 am 00 2007-11-18 10 am 30 标题一 地点一 详情 张三 张三245 2007-11-20 5 am 00 2007-11-20 6 am 00 标题三 地点三 详情三 张三 张三
240 2007-11-20 9 am 00 2007-11-20 10 am 30 标题一 地点一 详情一 张三 张三241 2007-11-21 9 am 00 2007-11-21 10 am 30 标题一 地点一 详情一 张三 张三
244 2007-11-21 5 am 00 2007-11-21 6 am 00 标题二 地址二 地址二 张三 张三247 2007-11-22 5 am 00 2007-11-22 6 am 00 标题四 地点四 详情四 张三 张三
242 2007-11-22 9 am 00 2007-11-22 10 am 30 标题一 地点一 详情一 张三 张三243 2007-11-23 9 am 00 2007-11-23 10 am 30 标题一 地点一 详情一 张三 张三
通过存储过程查找后的结果如下(3个输入参数'2007-11-21','张三','张三'):240 2007-11-20 9 am 00 2007-11-20 10 am 30 标题一 地点一 详情一 张三 张三
241 2007-11-21 9 am 00 2007-11-21 10 am 30 标题一 地点一 详情一 张三 张三
244 2007-11-21 5 am 00 2007-11-21 6 am 00 标题二 地址二 地址二 张三 张三
242 2007-11-22 9 am 00 2007-11-22 10 am 30 标题一 地点一 详情一 张三 张三
243 2007-11-23 9 am 00 2007-11-23 10 am 30 标题一 地点一 详情一 张三 张三

解决方案 »

  1.   

    数据没空格,显得乱.我用","分割开.
    --
    如数据库有以下记录246, 2007-11-18, 9 am, 00, 2007-11-18, 10 am, 30, 标题一, 地点一, 详情一, 张三, 张三,245, 2007-11-20, 5 am, 00, 2007-11-20, 6 am, 00, 标题三, 地点三, 详情三, 张三, 张三,
    240, 2007-11-20, 9 am, 00, 2007-11-20, 10 am, 30, 标题一, 地点一, 详情一, 张三, 张三,241, 2007-11-21, 9 am, 00, 2007-11-21, 10 am, 30, 标题一, 地点一, 详情一, 张三, 张三,
    244, 2007-11-21, 5 am, 00, 2007-11-21, 6 am, 00, 标题二, 地址二, 地址二, 张三, 张三,247, 2007-11-22, 5 am, 00, 2007-11-22, 6 am, 00, 标题四, 地点四, 详情四, 张三, 张三,
    242, 2007-11-22, 9 am, 00, 2007-11-22, 10 am, 30, 标题一, 地点一, 详情一, 张三, 张三,243, 2007-11-23, 9 am, 00, 2007-11-23, 10 am, 30, 标题一, 地点一, 详情一, 张三, 张三,
    通过存储过程查找后的结果如下(3个输入参数'2007-11-21','张三','张三'):240, 2007-11-20, 9 am, 00, 2007-11-20, 10 am, 30, 标题一, 地点一, 详情一, 张三, 张三
    241, 2007-11-21, 9 am, 00, 2007-11-21, 10 am, 30, 标题一, 地点一, 详情一, 张三, 张三
    244, 2007-11-21, 5 am, 00, 2007-11-21, 6 am, 00, 标题二, 地址二, 地址二, 张三, 张三
    242, 2007-11-22, 9 am, 00, 2007-11-22, 10 am, 30, 标题一, 地点一, 详情一, 张三, 张三
    243, 2007-11-23, 9 am, 00, 2007-11-23, 10 am, 30, 标题一, 地点一, 详情一, 张三, 张三
    ---存的时候用了2种方式:
    1 , 存一个某一天的记录,EventStartDate 和 EventEndDate相同,2,存一个某几天连续的记录,如从'2007-09-12'到'2007-09-15'
    在一个insert的存储过程中会被拆分为4条记录
    EventStartDate:2007-09-12 , EventEndDate:2007-09-12的一条记录,
    EventStartDate:2007-09-13 , EventEndDate:2007-09-13的一条记录,
    EventStartDate:2007-09-14 , EventEndDate:2007-09-14的一条记录,
    EventStartDate:2007-09-15 , EventEndDate:2007-09-15的一条记录.
    这4条记录除了ventId和EventStartDate,EventendDate之外,其他字段都相同现在是为取数据写存储过程.
    给定的3个参数是:
    @eventStartDate varchar(20),@pubUserName varchar(30),@subUserName varchar(30)比如我要取的是'2007-9-13' 号的记录,那么第一个部分要吧所有EventStartDate为
    '2007-9-13' 取出来,而且分析取出来的这部分,如果这里面的记录中是以前连续创建出来的记录,就那些关联到的记录也取出来(如上面的12-15号的4条记录都有包含在内.),这2个部分的合成一个完整的记录集返回.
      

  2.   

    set nocount on
    declare @a table(EventID int ,EventStartDate varchar(20),EventStartHour varchar(10),EventStartMinute varchar(10),
    EventEndDate varchar(20),EventEndHour varchar(10),EventEndMinute varchar(10),EventTitle varchar(30),EventLocation varchar(30),
    EventDescription varchar(250),PubUserName varchar(30),SubUserName varchar(30))insert @a select 246, '2007-11-18', '9 am', '00', '2007-11-18', '10 am', '30', '标题一', '地点一', '详情一', '张三', '张三'
    union all select 245, '2007-11-20', '5 am', '00', '2007-11-20', '6 am', '00', '标题三', '地点三', '详情三', '张三', '张三'
    union all select 240, '2007-11-20', '9 am', '00', '2007-11-20', '10 am', '30', '标题一', '地点一', '详情一', '张三', '张三'
    union all select 241, '2007-11-21', '9 am', '00', '2007-11-21', '10 am', '30', '标题一', '地点一', '详情一', '张三', '张三'
    union all select 244, '2007-11-21', '5 am', '00', '2007-11-21', '6 am', '00', '标题二', '地址二', '地址二', '张三', '张三'
    union all select 247, '2007-11-22','5 am', '00', '2007-11-22', '6 am', '00', '标题四', '地点四', '详情四', '张三', '张三'
    union all select 242, '2007-11-22', '9 am', '00', '2007-11-22', '10 am', '30', '标题一', '地点一', '详情一', '张三', '张三'
    union all select 243, '2007-11-23', '9 am', '00', '2007-11-23', '10 am', '30', '标题一', '地点一', '详情一', '张三', '张三'declare @b table(EventID int ,EventStartDate varchar(20),EventStartHour varchar(10),EventStartMinute varchar(10),
    EventEndDate varchar(20),EventEndHour varchar(10),EventEndMinute varchar(10),EventTitle varchar(30),EventLocation varchar(30),
    EventDescription varchar(250),PubUserName varchar(30),SubUserName varchar(30))declare @c table(a varchar(20),b varchar(20))declare @s varchar(10)
    set @s='2007-11-21'insert @b select * from @a where EventStartDate=@sselect id=identity(int,1,1),* into # from @a a where not exists(select 1 from @a where datediff(day,EventStartDate,a.EventStartDate)=1)
    select id=identity(int,1,1), * into #t from @a a where not exists(select 1 from @a where datediff(day,a.EventStartDate,EventStartDate)=1)insert @c  select a.EventStartDate,b.EventStartDate from # a inner join #t b on a.id=b.id
    insert @b select a.* from @a a,@c b,@b c where a.EventStartDate between b.a and b.b and @s between b.a and b.b
    and a.EventStartHour=c.EventStartHour and a.EventStartMinute=c.EventStartMinute
    and  a.EventEndHour=c.EventEndHour
    and a.EventEndMinute=c.EventEndMinute and a.EventTitle=c.EventTitle
    and a.EventLocation=c.EventLocation and a.EventDescription=c.EventDescription
    and a.PubUserName=c.PubUserName and a.SubUserName=c.SubUserName and a.eventstartdate<>@s
    select * from @b
    drop table #,#t
      

  3.   

    --result
    /*
    EventID     EventStartDate       EventStartHour EventStartMinute EventEndDate         EventEndHour EventEndMinute EventTitle                     EventLocation                  EventDescription                                                                                                                                                                                                                                           PubUserName                    SubUserName                    
    ----------- -------------------- -------------- ---------------- -------------------- ------------ -------------- ------------------------------ ------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------ ------------------------------ 
    241         2007-11-21           9 am           00               2007-11-21           10 am        30             标题一                            地点一                            详情一                                                                                                                                                                                                                                                        张三                             张三
    244         2007-11-21           5 am           00               2007-11-21           6 am         00             标题二                            地址二                            地址二                                                                                                                                                                                                                                                        张三                             张三
    240         2007-11-20           9 am           00               2007-11-20           10 am        30             标题一                            地点一                            详情一                                                                                                                                                                                                                                                        张三                             张三
    242         2007-11-22           9 am           00               2007-11-22           10 am        30             标题一                            地点一                            详情一                                                                                                                                                                                                                                                        张三                             张三
    243         2007-11-23           9 am           00               2007-11-23           10 am        30             标题一                            地点一                            详情一                                                                                                                                                                                                                                                        张三                             张三
    */
      

  4.   

    create procedure xx
    @eventStartDate varchar(20),@pubUserName varchar(30),@subUserName varchar(30)
    as 
    set nocount on
    declare @a table(EventID int ,EventStartDate varchar(20),EventStartHour varchar(10),EventStartMinute varchar(10),
    EventEndDate varchar(20),EventEndHour varchar(10),EventEndMinute varchar(10),EventTitle varchar(30),EventLocation varchar(30),
    EventDescription varchar(250),PubUserName varchar(30),SubUserName varchar(30))
    insert @a select * from T_Event declare @b table(EventID int ,EventStartDate varchar(20),EventStartHour varchar(10),EventStartMinute varchar(10),
    EventEndDate varchar(20),EventEndHour varchar(10),EventEndMinute varchar(10),EventTitle varchar(30),EventLocation varchar(30),
    EventDescription varchar(250),PubUserName varchar(30),SubUserName varchar(30))declare @c table(a varchar(20),b varchar(20))insert @b select * from @a where EventStartDate=@eventStartDate and PubUserName = @pubUserName and SubUserName =@subUserNameselect id=identity(int,1,1),* into # from @a a where not exists(select 1 from @a where datediff(day,EventStartDate,a.EventStartDate)=1)
    select id=identity(int,1,1), * into #t from @a a where not exists(select 1 from @a where datediff(day,a.EventStartDate,EventStartDate)=1)insert @c select a.EventStartDate,b.EventStartDate from # a inner join #t b on a.id=b.id
    insert @b select a.* from @a a,@c b,@b c where a.EventStartDate between b.a and b.b and @eventStartDate between b.a and b.b
    and a.EventStartHour=c.EventStartHour and a.EventStartMinute=c.EventStartMinute
    and a.EventEndHour=c.EventEndHour
    and a.EventEndMinute=c.EventEndMinute and a.EventTitle=c.EventTitle
    and a.EventLocation=c.EventLocation and a.EventDescription=c.EventDescription
    and a.PubUserName=c.PubUserName and a.SubUserName=c.SubUserName and a.EventStartDate<>@eventStartDate
    select distinct * from @b
    drop table #,#t改成存储过程不知道为什么会取到'2007-11-18'的那个.