有个classinfo表
表内有
classname,
classid,
classkeyword1,
classkeyword2,
classkeyword3,
classkeyword4,
classkeyword5,现在要的实现结果是这样的,输入一个字符,然后去查,和五个classkeyword中有多少是完全匹配的,匹配的越多,排在越前面,这样排十个.比如有这样的一个记录
classname='水果刀'
classid=11
classkeyword1='刀'
classkeyword2='刀'
classkeyword3='刀'
classkeyword4='餐具'
classkeyword5='厨房用具'classname='杀猪刀'
classid=12
classkeyword1='刀'
classkeyword2='刀'
classkeyword3='餐具'
classkeyword4='玩具'
classkeyword5='武器'如果输入一个刀,那么
水果刀就排在杀猪刀之前,最好还能得到一个列名,就是有几个匹配,水果刀是3,杀猪刀2谢谢,头痛死了

解决方案 »

  1.   

    --生成测试数据
    declare @d table(classname varchar(50),id int,classkeyword1 varchar(10),classkeyword2 varchar(10),classkeyword3 varchar(10),classkeyword4 varchar(10),classkeyword5 varchar(10))
    insert into @d select '水果刀',11,'刀','刀','刀','餐具','厨房用具'
    insert into @d select '杀猪刀',12,'刀','刀','餐具','玩具','武器'
    --解决方法
    select classname,id,classkeyword1,classkeyword2,classkeyword3,classkeyword4,classkeyword5,c1+c2+c3+c4+c5 from (
    select *,
    c1=case when len(classkeyword1)-len(replace(classkeyword1,'刀',''))>0 then 1 else 0 end ,
    c2=case when len(classkeyword2)-len(replace(classkeyword2,'刀',''))>0 then 1 else 0 end ,
    c3=case when len(classkeyword3)-len(replace(classkeyword3,'刀',''))>0 then 1 else 0 end, 
    c4=case when len(classkeyword4)-len(replace(classkeyword4,'刀',''))>0 then 1 else 0 end, 
    c5=case when len(classkeyword5)-len(replace(classkeyword5,'刀',''))>0 then 1 else 0 end 
    from @d
    where charindex('刀',classkeyword1+classkeyword2+classkeyword3+classkeyword4+classkeyword5)>0
    )a
    order by 8 desc
      

  2.   

    --严格的,应该这样写declare @d table(classname varchar(50),id int,classkeyword1 varchar(10),classkeyword2 varchar(10),classkeyword3 varchar(10),classkeyword4 varchar(10),classkeyword5 varchar(10))
    insert into @d select '水果刀',11,'刀','刀','刀','餐具','厨房用具'
    insert into @d select '杀猪刀',12,'刀','刀','餐具','玩具','武器'select classname,id,classkeyword1,classkeyword2,classkeyword3,classkeyword4,classkeyword5,c1+c2+c3+c4+c5 from (
    select *,
    c1=case when len(classkeyword1)-len(replace(classkeyword1,'刀',''))>0 then 1 else 0 end ,
    c2=case when len(classkeyword2)-len(replace(classkeyword2,'刀',''))>0 then 1 else 0 end ,
    c3=case when len(classkeyword3)-len(replace(classkeyword3,'刀',''))>0 then 1 else 0 end, 
    c4=case when len(classkeyword4)-len(replace(classkeyword4,'刀',''))>0 then 1 else 0 end, 
    c5=case when len(classkeyword5)-len(replace(classkeyword5,'刀',''))>0 then 1 else 0 end 
    from @d
    where charindex('刀',classkeyword1)>0
    or charindex('刀',classkeyword2)>0
    or charindex('刀',classkeyword3)>0
    or charindex('刀',classkeyword4)>0
    or charindex('刀',classkeyword5)>0)a
    order by 8 desc