表结构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,则结果是 内井班

解决方案 »

  1.   

    具体代码就不写了。
    说一下自己的大致思路吧。
    1. 建一个表变量, 需要2列,一列插入 表 "部门职责" 的列 "bmbh",另外一列是匹配次数。默认值为0。
    2. 对于每个存储过程的变量进行判断,如果符合一次,那就把表变量的匹配次数+1,最后选取值最大的就OK。
      

  2.   


    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
    */