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

小弟我想建立一个这样的SQL查询

2012-01-06 
我想建立一个这样的SQL查询: 表名:检测项目项目编号版本号检测项目011火灾自动报警系统01011消防控制室010

我想建立一个这样的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 火?自??警系?

热点排行