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

刚才说的分组有关问题不清楚,已整理好

2012-03-23 
刚才说的分组问题不清楚,已整理好: 表名:检测项目项目编号版本号检测项目011火灾自动报警系统01011消防控

刚才说的分组问题不清楚,已整理好:

表名:检测项目

项目编号   版本号检测项目
01                   1         火灾自动报警系统
0101               1         消防控制室
010101           1         消防控制室位置1
010101           2         消防控制室位置2
010101           3         消防控制室位置3
010102           1         非直接通向室外的门
010102           3         非直接通向室外的门
010103           1         门的开启方向
010103           2         门的开启方向
010104           1         送、回风管防火隔断
010104           5         送、回风管防火隔断
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 "直拨电话
.....

结果说明:
1--[项目编号]不重复
2--[版本号]=2
3--如没有[版本号]是2的,取小于2的那条记录,上例:010102
目的就是把等于[版本号]的取出,不等于[版本号]的只取仅小于的那条记录.


例子2:
SELECT   *   FROM   检测项目   WHERE   版本号=5

结果:
项目编号   版本号检测项目
01                   1         火灾自动报警系统
0101               1         消防控制室
010101           3         消防控制室位置3
010102           3         非直接通向室外的门
010103           2         门的开启方向
010104           5         送、回风管防火隔断
010105           1         电气线路及管路设置
010106           1         抗干扰性
010107           1         标志
010108           1         "119 "直拨电话
.......



1--[项目编号]不重复
2--[版本号]=5
3--如没有[版本号]是5的,取小于5的那条记录
目的就是把等于[版本号]的取出,不等于[版本号]的只取仅小于的那条记录.


[解决办法]
declare @版本号 int
set @版本号=5


SELECT * FROM 检测项目 a
WHERE 版本号=(
select top 1 版本号 from 检测项目
where 项目编号=a.项目编号
and 版本号 <=@版本号
order by 版本号 desc
)

[解决办法]
那你另外的表也應該有個 版本号 字段 關聯,你把@版本号 換成那邊關聯的 版本号 就可以了
比如 要關聯的表 b(..., 版本號 varchar(1),....)
select * from b,(SELECT * FROM 检测项目 a
WHERE 版本号=(
select top 1 版本号 from 检测项目
where 项目编号=a.项目编号
and 版本号 <=b.版本号
order by 版本号 desc
))C where 關聯條件

热点排行