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

周围走 2007-06-26 01:04:14

表名:检测项目

项目编号 版本号 检测项目
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
目的就是把等于[版本号]的取出,不等于[版本号]的只取仅小于的那条记录.


...全文
195 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
周围走 2007-06-26
  • 打赏
  • 举报
回复
不用游标行吗?
yrwx001 2007-06-26
  • 打赏
  • 举报
回复
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 火?自??警系?
周围走 2007-06-26
  • 打赏
  • 举报
回复
目的就是把等于[版本号]的取出,不等于[版本号]的只取仅小于的那条记录.

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧