sql 多条件查询的问题

明月书君 2015-01-30 05:11:49
表中有如下几个字段,gid(组编号,int),type(组类型,int ),name(组名称,字符串),还有其他若干字段。
现在我想传进来用户输入的gid和name的值(字符串类型, 用来模糊搜索)。
条件优先级是:
1.先按照gid精确查找,如果输如了gid但是没有精确值就直接返回空了。
2.若没有输入gid,按照组名精确查找
3.组名精确查找后,再惊醒模糊查找,优先返回通配符在name后面的,再返回通配符在name前面,
4当上述数据相等时,以 type 从高到低(3,2,1)的顺序进行查找。
5.在所有符合条件的数据中返回前15条。

我用的是sqlserver
有没有办法在一个存储过程里得到这些结果呢?我不知道多个搜索条件怎么实现我这样的顺序,或者用union是否可以完成?
求高人指点。
...全文
207 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hepe00 2015-01-30
  • 打赏
  • 举报
回复
--条件优先级是:
--1.先按照gid精确查找,如果输如了gid但是没有精确值就直接返回空了。
--2.若没有输入gid,按照组名精确查找
--3.组名精确查找后,再惊醒模糊查找,优先返回通配符在name后面的,再返回通配符在name前面,
--4当上述数据相等时,以 type 从高到低(3,2,1)的顺序进行查找。
--5.在所有符合条件的数据中返回前15条。

declare @sql nvarchar(4000);
declare @gid varchar(30);
declare @group varchar(20);
declare @name varchar(20);

set @sql='select top 15 * from Tb ';
select @sql=@sql +' where '+
		case when @gid is null then ' gid=@gid ' else ' [group]=@group ' end
		+ ' and [name] like @name% and [name] like %@name  order by [type] desc '
exec (@sql)
Tiger_Zhao 2015-01-30
  • 打赏
  • 举报
回复
DECLARE @sql varchar(max)
IF @gid IS NOT NULL
SET @sql = 'SELECT TOP 15 *, 0 t FROM table1 WHERE gid='+Convert(varchar(11),@gid
ELSE
SET @sql = 'SELECT TOP 15 * FROM (
SELECT TOP 15 *, 1 t FROM table1 WHERE name='''+@name+''' ORDER BY type DESC
UNION ALL
SELECT TOP 15 *, 1 t FROM table1 WHERE name like'''+@name+'%'' ORDER BY type DESC
UNION ALL
SELECT TOP 15 *, 1 t FROM table1 WHERE name like''%'+@name+''' ORDER BY type DESC
) t
ORDER BY t, type DESC'

EXEC (@sql)

34,587

社区成员

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

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