表结构create table 部门职责(
bmbh nvarchar(50),--部门
qybh nvarchar(50),--区域
xqbh nvarchar(50),--小区
ldh nvarchar(50),--楼栋
fwzlbh nvarchar(50),--总类
fwdlbh nvarchar(50),--大类
fwxlbh nvarchar(50)--小类
)数据insert into 部门职责 values('电工班','','','','02','0201','020102')
insert into 部门职责 values('金华物管站','金龙镇','金华小区','2栋','','','')
insert into 部门职责 values('友好物管站','金龙镇','金华小区','','','','')
insert into 部门职责 values('内井班','韶山社区','韶山小区','1栋','01','0101','010101')
insert into 部门职责 values('综合班','韶山社区','韶山小区','','01','0101','')
现在需要写一个存储过程,参数是 区域,小区,楼栋,总类,大类,小类(都不会为空)
查询出最匹配的一条数据(部门),假如 参数是 金龙镇,金华小区,2栋,01,0101,010101,则结果是 金华物管站
假如 参数是 金龙镇,金华小区,3栋,01,0101,010101,则结果是 友好物管站
假如 参数是 '','','','02','0201','020102' 则结果是 电工班
假如 参数是 韶山社区,韶山小区,3栋,01,0101,010102,则结果是 综合班
假如 参数是 韶山社区,韶山小区,1栋,01,0101,010101,则结果是 内井班
bmbh nvarchar(50),--部门
qybh nvarchar(50),--区域
xqbh nvarchar(50),--小区
ldh nvarchar(50),--楼栋
fwzlbh nvarchar(50),--总类
fwdlbh nvarchar(50),--大类
fwxlbh nvarchar(50)--小类
)数据insert into 部门职责 values('电工班','','','','02','0201','020102')
insert into 部门职责 values('金华物管站','金龙镇','金华小区','2栋','','','')
insert into 部门职责 values('友好物管站','金龙镇','金华小区','','','','')
insert into 部门职责 values('内井班','韶山社区','韶山小区','1栋','01','0101','010101')
insert into 部门职责 values('综合班','韶山社区','韶山小区','','01','0101','')
现在需要写一个存储过程,参数是 区域,小区,楼栋,总类,大类,小类(都不会为空)
查询出最匹配的一条数据(部门),假如 参数是 金龙镇,金华小区,2栋,01,0101,010101,则结果是 金华物管站
假如 参数是 金龙镇,金华小区,3栋,01,0101,010101,则结果是 友好物管站
假如 参数是 '','','','02','0201','020102' 则结果是 电工班
假如 参数是 韶山社区,韶山小区,3栋,01,0101,010102,则结果是 综合班
假如 参数是 韶山社区,韶山小区,1栋,01,0101,010101,则结果是 内井班
说一下自己的大致思路吧。
1. 建一个表变量, 需要2列,一列插入 表 "部门职责" 的列 "bmbh",另外一列是匹配次数。默认值为0。
2. 对于每个存储过程的变量进行判断,如果符合一次,那就把表变量的匹配次数+1,最后选取值最大的就OK。
declare @T table (c1 int,c2 int,c3 int,c4 int,c5 int)
insert into @T
select 1,2,3,4,5 union all
select 1,3,4,5,6 union all
select 2,1,2,3,4 union all
select 6,7,8,9,0declare @c1 int set @c1=3
declare @c2 int set @c2=3
declare @c3 int set @c3=4
declare @c4 int set @c4=5
declare @c5 int set @c5=1select top 1
*,
case when c1=@c1 then 1 else 0 end +
case when c2=@c2 then 1 else 0 end +
case when c3=@c3 then 1 else 0 end +
case when c4=@c4 then 1 else 0 end +
case when c5=@c5 then 1 else 0 end as 匹配度
from @T order by 匹配度 desc/*
c1 c2 c3 c4 c5 匹配度
----------- ----------- ----------- ----------- ----------- -----------
1 3 4 5 6 3
*/