求个我是死也想不出的sql语句

kanodo 2006-12-05 02:03:45
有个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

谢谢,头痛死了
...全文
177 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
拓狼 2006-12-05
  • 打赏
  • 举报
回复
--严格的,应该这样写

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

ldw701 2006-12-05
  • 打赏
  • 举报
回复
mark
kanodo 2006-12-05
  • 打赏
  • 举报
回复
太感谢了,这就结掉
kanodo 2006-12-05
  • 打赏
  • 举报
回复
谢谢,我去试试
拓狼 2006-12-05
  • 打赏
  • 举报
回复
--生成测试数据
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
kanodo 2006-12-05
  • 打赏
  • 举报
回复
up
kanodo 2006-12-05
  • 打赏
  • 举报
回复
up

34,870

社区成员

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

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