我想建立一个这样的SQL查询:
 表名:检测项目   
 项目编号   版本号	检测项目 
 01	1	火灾自动报警系统 
 0101	1	消防控制室 
 010101	1	消防控制室位置1 
 010101	2	消防控制室位置2 
 010101	3	消防控制室位置3 
 010102	1	非直接通向室外的门1 
 010102	3	非直接通向室外的门2 
 010103	1	门的开启方向 
 010103	2	门的开启方向 
 010104	1	送、回风管防火隔断1 
 010104	4	送、回风管防火隔断2 
 010105	1	电气线路及管路设置 
 010106	1	抗干扰性 
 010107	1	标志 
 010108	1	 "119 "直拨电话 
 ......     
 上面的010101\010102\010103\010104有2到3个版本号,其余只有1个.   
 我想实现这样的结果:   
 例子1: 
 SELECT   *   FROM   检测项目   WHERE   版本号=2   
 结果: 
 项目编号   版本号	检测项目 
 01	1	火灾自动报警系统 
 0101	1	消防控制室 
 010101	2	消防控制室位置2 
 010102	1	非直接通向室外的门 
 010103	2	门的开启方向 
 010104	1	送、回风管防火隔断 
 010105	1	电气线路及管路设置 
 010106	1	抗干扰性 
 010107	1	标志 
 010108	1	 "119 "直拨电话 
 .....     
 例子2: 
 SELECT   *   FROM   检测项目   WHERE   版本号=4   
 结果: 
 项目编号   版本号	检测项目 
 01	1	火灾自动报警系统 
 0101	1	消防控制室 
 010101	3	消防控制室位置3 
 010102	3	非直接通向室外的门2 
 010103	2	门的开启方向 
 010104	4	送、回风管防火隔断2 
 010105	1	电气线路及管路设置 
 010106	1	抗干扰性 
 010107	1	标志 
 010108	1	 "119 "直拨电话 
 .......     
 结果说明: 
 1--[项目编号]不重复 
 2--[版本号]=2 
 3--如没有[版本号]是2的,取小于2的那条记录,上例:010102 
 目的就是把等于[版本号]的取出,不等于[版本号]的只取仅小于的那条记录.     
------解决方案--------------------create table #t (sid varchar(7),stext varchar(20)) 
 insert #t 
 select  '011 ', '火灾自动报警系统 ' union all 
 select  '01011 ', '消防控制室 ' union all 
 select  '0101011 ', '消防控制室位置1 ' union all 
 select  '0101012 ', '消防控制室位置2 ' union all 
 select  '0101013 ', '消防控制室位置3 ' union all 
 select  '0101021 ', '非直接通向室外的门1 ' union all 
 select  '0101023 ', '非直接通向室外的门2 ' union all 
 select  '0101031 ', '门的开启方向 ' union all 
 select  '0101032 ', '门的开启方向 ' union all 
 select  '0101041 ', '送、回风管防火隔断1 ' union all 
 select  '0101044 ', '送、回风管防火隔断2 ' union all 
 select  '0101051 ', '电气线路及管路设置 ' union all 
 select  '0101061 ', '抗干扰性 ' union all 
 select  '0101071 ', '标志 ' union all 
 select  '0101081 ', ' "119 "直拨电话 '   
 create table #t1 (sid varchar(7),stext varchar(20))     
 declare @sid varchar(1),@iteam varchar(10)   
 set @sid =  '4 ' 
 declare cur cursor for  
 select distinct bsid = left(sid,6) from #t 
 open cur 
 FETCH NEXT FROM cur INTO @iteam 
 while @@fetch_status = 0 
 begin 
 insert #t1 
 select top 1 * from #t where left(sid,6) = @iteam and right(sid,1)  <= @sid order by sid  desc 
 FETCH NEXT FROM cur INTO @iteam 
 end   
 CLOSE cur 
 DEALLOCATE cur 
 select * from #t1 
 drop table #t1 
 drop table #t     
 sid     stext                 
 ------- --------------------  
 0101013 消防控制室位置3 
 0101023 非直接通向室外的?2 
 0101032 ?的??方向 
 0101044 送、回?管防火隔?2 
 0101051 ?气?路及管路?置 
 0101061 抗干扰性 
 0101071 ?志 
 0101081  "119 "直??? 
 01011   消防控制室 
 011     火?自??警系?