首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

不要用游标!解决办法

2012-03-24 
不要用游标!原始数据:IDdatelinep_startp_endflag12010/1/1AAA-BBBAAABBB522010/1/4AAA-BBBAAABBB532010/1

不要用游标!
原始数据:
IDdatelinep_startp_endflag
12010/1/1AAA-BBBAAABBB5
22010/1/4AAA-BBBAAABBB5
32010/1/9AAA-BBBAAABBB5
42010/1/10AAA-BBBAAABBB6
52010/1/11AAA-BBBAAABBB5
62010/1/12AAA-BBBAAABBB6
72010/1/14AAA-BBBAAABBB6
82010/1/15AAA-BBBAAABBB6
92010/1/16AAA-BBBAAABBB6
102010/1/18AAA-BBBAAABBB6
112010/1/19AAA-BBBAAABBB5
122010/1/20AAA-BBBAAABBB5
132010/1/22AAA-BBBAAABBB6
142010/1/23AAA-BBBAAABBB6
152010/1/25AAA-BBBAAABBB3
162010/1/27AAA-BBBAAABBB3
172010/1/31AAA-BBBAAABBB3
182010/2/1AAA-BBBAAABBB3
192010/2/2AAA-BBBAAABBB3
202010/2/3AAA-BBBAAABBB3
212010/2/5AAA-BBBAAABBB3
222010/2/6AAA-BBBAAABBB3
232010/2/8AAA-BBBAAABBB3
242010/2/9AAA-BBBAAABBB3
252010/2/10AAA-BBBAAABBB3
262010/2/11AAA-BBBAAABBB4
272010/2/12AAA-BBBAAABBB4
282010/2/13AAA-BBBAAABBB4
292010/2/14AAA-BBBAAABBB4
302010/2/15AAA-BBBAAABBB4
312011/4/9CCC-DDDCCCDDD6
322011/4/11CCC-DDDCCCDDD6
332011/4/13CCC-DDDCCCDDD6
342011/4/16CCC-DDDCCCDDD0
352011/4/18CCC-DDDCCCDDD6
362011/4/20CCC-DDDCCCDDD6
372011/4/23CCC-DDDCCCDDD6
382011/4/25CCC-DDDCCCDDD6
392011/4/27CCC-DDDCCCDDD6
402011/4/30CCC-DDDCCCDDD6
412011/5/2CCC-DDDCCCDDD6
422011/5/4CCC-DDDCCCDDD6
432011/5/7CCC-DDDCCCDDD6
442011/5/9CCC-DDDCCCDDD5
452011/5/11CCC-DDDCCCDDD5
462011/5/14CCC-DDDCCCDDD5
472011/5/16CCC-DDDCCCDDD6
482011/5/18CCC-DDDCCCDDD5
492011/5/21CCC-DDDCCCDDD5
502011/5/23CCC-DDDCCCDDD5
512011/5/25CCC-DDDCCCDDD5
522011/5/28CCC-DDDCCCDDD5
532011/5/30CCC-DDDCCCDDD6
542011/6/1CCC-DDDCCCDDD6
552011/6/4CCC-DDDCCCDDD6
562011/6/6CCC-DDDCCCDDD6
572011/6/8CCC-DDDCCCDDD6
582011/6/11CCC-DDDCCCDDD5
要求:对于相同的line、相同的p_start、相同的p_end,对于flag<>6的记录将日期合并成一个区间,要求得到如下结果表:
COL1COL2COL3COL4COL5COL6
AAA-BBBAAABBB2010/1/1 2010/1/95
AAA-BBBAAABBB2010/1/11 2010/1/115
AAA-BBBAAABBB2010/1/19 2010/1/205
AAA-BBBAAABBB2010/1/25 2010/2/103
AAA-BBBAAABBB2010/2/11 2010/2/154
CCC-DDDCCCDDD2011/4/16 2011/4/160
CCC-DDDCCCDDD2011/5/9 2011/5/145
CCC-DDDCCCDDD2011/5/18 2011/5/285
CCC-DDDCCCDDD2011/6/11 2011/6/115


[解决办法]
select line,p_start,p_end,min(date) , max(date) , count(1) from tb where flag<>6 group by line,p_start,p_end
[解决办法]

SQL code
if object_id('[tb]') is not null drop table [tb]gocreate table [tb]([ID] int,[date] datetime,[line] varchar(7),[p_start] varchar(3),[p_end] varchar(3),[flag] int)insert [tb]select 1,'2010/1/1','AAA-BBB','AAA','BBB',5 union allselect 2,'2010/1/4','AAA-BBB','AAA','BBB',5 union allselect 3,'2010/1/9','AAA-BBB','AAA','BBB',5 union allselect 4,'2010/1/10','AAA-BBB','AAA','BBB',6 union allselect 5,'2010/1/11','AAA-BBB','AAA','BBB',5 union allselect 6,'2010/1/12','AAA-BBB','AAA','BBB',6 union allselect 7,'2010/1/14','AAA-BBB','AAA','BBB',6 union allselect 8,'2010/1/15','AAA-BBB','AAA','BBB',6 union allselect 9,'2010/1/16','AAA-BBB','AAA','BBB',6 union allselect 10,'2010/1/18','AAA-BBB','AAA','BBB',6 union allselect 11,'2010/1/19','AAA-BBB','AAA','BBB',5 union allselect 12,'2010/1/20','AAA-BBB','AAA','BBB',5 union allselect 13,'2010/1/22','AAA-BBB','AAA','BBB',6 union allselect 14,'2010/1/23','AAA-BBB','AAA','BBB',6 union allselect 15,'2010/1/25','AAA-BBB','AAA','BBB',3 union allselect 16,'2010/1/27','AAA-BBB','AAA','BBB',3 union allselect 17,'2010/1/31','AAA-BBB','AAA','BBB',3 union allselect 18,'2010/2/1','AAA-BBB','AAA','BBB',3 union allselect 19,'2010/2/2','AAA-BBB','AAA','BBB',3 union allselect 20,'2010/2/3','AAA-BBB','AAA','BBB',3 union allselect 21,'2010/2/5','AAA-BBB','AAA','BBB',3 union allselect 22,'2010/2/6','AAA-BBB','AAA','BBB',3 union allselect 23,'2010/2/8','AAA-BBB','AAA','BBB',3 union allselect 24,'2010/2/9','AAA-BBB','AAA','BBB',3 union allselect 25,'2010/2/10','AAA-BBB','AAA','BBB',3 union allselect 26,'2010/2/11','AAA-BBB','AAA','BBB',4 union allselect 27,'2010/2/12','AAA-BBB','AAA','BBB',4 union allselect 28,'2010/2/13','AAA-BBB','AAA','BBB',4 union allselect 29,'2010/2/14','AAA-BBB','AAA','BBB',4 union allselect 30,'2010/2/15','AAA-BBB','AAA','BBB',4 union allselect 31,'2011/4/9','CCC-DDD','CCC','DDD',6 union allselect 32,'2011/4/11','CCC-DDD','CCC','DDD',6 union allselect 33,'2011/4/13','CCC-DDD','CCC','DDD',6 union allselect 34,'2011/4/16','CCC-DDD','CCC','DDD',0 union allselect 35,'2011/4/18','CCC-DDD','CCC','DDD',6 union allselect 36,'2011/4/20','CCC-DDD','CCC','DDD',6 union allselect 37,'2011/4/23','CCC-DDD','CCC','DDD',6 union allselect 38,'2011/4/25','CCC-DDD','CCC','DDD',6 union allselect 39,'2011/4/27','CCC-DDD','CCC','DDD',6 union allselect 40,'2011/4/30','CCC-DDD','CCC','DDD',6 union allselect 41,'2011/5/2','CCC-DDD','CCC','DDD',6 union allselect 42,'2011/5/4','CCC-DDD','CCC','DDD',6 union allselect 43,'2011/5/7','CCC-DDD','CCC','DDD',6 union allselect 44,'2011/5/9','CCC-DDD','CCC','DDD',5 union allselect 45,'2011/5/11','CCC-DDD','CCC','DDD',5 union allselect 46,'2011/5/14','CCC-DDD','CCC','DDD',5 union allselect 47,'2011/5/16','CCC-DDD','CCC','DDD',6 union allselect 48,'2011/5/18','CCC-DDD','CCC','DDD',5 union allselect 49,'2011/5/21','CCC-DDD','CCC','DDD',5 union allselect 50,'2011/5/23','CCC-DDD','CCC','DDD',5 union allselect 51,'2011/5/25','CCC-DDD','CCC','DDD',5 union allselect 52,'2011/5/28','CCC-DDD','CCC','DDD',5 union allselect 53,'2011/5/30','CCC-DDD','CCC','DDD',6 union allselect 54,'2011/6/1','CCC-DDD','CCC','DDD',6 union allselect 55,'2011/6/4','CCC-DDD','CCC','DDD',6 union allselect 56,'2011/6/6','CCC-DDD','CCC','DDD',6 union allselect 57,'2011/6/8','CCC-DDD','CCC','DDD',6 union allselect 58,'2011/6/11','CCC-DDD','CCC','DDD',5go-->数据查询:select line,p_start,p_end,min(date) as startdate,max(date) as enddate,flagfrom(select gid=id-(select count(1) from tb where line=a.line and p_start=a.p_start and p_end=a.p_end and flag=a.flag and id<a.id),* from tb  awhere flag<>6 ) bgroup by line,p_start,p_end,flag,gidorder by startdate/**line    p_start p_end startdate               enddate                 flag------- ------- ----- ----------------------- ----------------------- -----------AAA-BBB AAA     BBB   2010-01-01 00:00:00.000 2010-01-09 00:00:00.000 5AAA-BBB AAA     BBB   2010-01-11 00:00:00.000 2010-01-11 00:00:00.000 5AAA-BBB AAA     BBB   2010-01-19 00:00:00.000 2010-01-20 00:00:00.000 5AAA-BBB AAA     BBB   2010-01-25 00:00:00.000 2010-02-10 00:00:00.000 3AAA-BBB AAA     BBB   2010-02-11 00:00:00.000 2010-02-15 00:00:00.000 4CCC-DDD CCC     DDD   2011-04-16 00:00:00.000 2011-04-16 00:00:00.000 0CCC-DDD CCC     DDD   2011-05-09 00:00:00.000 2011-05-14 00:00:00.000 5CCC-DDD CCC     DDD   2011-05-18 00:00:00.000 2011-05-28 00:00:00.000 5CCC-DDD CCC     DDD   2011-06-11 00:00:00.000 2011-06-11 00:00:00.000 5(9 行受影响)**/ 

热点排行