我想建立一个这样的SQL查询:
表名:检测项目
项目编号 版本号检测项目
011火灾自动报警系统
01011消防控制室
0101011消防控制室位置1
0101012消防控制室位置2
0101013消防控制室位置3
0101021非直接通向室外的门1
0101023非直接通向室外的门2
0101031门的开启方向
0101032门的开启方向
0101041送、回风管防火隔断1
0101044送、回风管防火隔断2
0101051电气线路及管路设置
0101061抗干扰性
0101071标志
0101081 "119 "直拨电话
......
上面的010101\010102\010103\010104有2到3个版本号,其余只有1个.
我想实现这样的结果:
例子1:
SELECT * FROM 检测项目 WHERE 版本号=2
结果:
项目编号 版本号检测项目
011火灾自动报警系统
01011消防控制室
0101012消防控制室位置2
0101021非直接通向室外的门
0101032门的开启方向
0101041送、回风管防火隔断
0101051电气线路及管路设置
0101061抗干扰性
0101071标志
0101081 "119 "直拨电话
.....
例子2:
SELECT * FROM 检测项目 WHERE 版本号=4
结果:
项目编号 版本号检测项目
011火灾自动报警系统
01011消防控制室
0101013消防控制室位置3
0101023非直接通向室外的门2
0101032门的开启方向
0101044送、回风管防火隔断2
0101051电气线路及管路设置
0101061抗干扰性
0101071标志
0101081 "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 火?自??警系?