求教一多条件的查询语句,在线等

by1782 2009-03-22 08:49:24
求教一查询语句,谢谢

create table test
(
xsID int primary key identity,
Reg_ID int, --会员ID
cpID int, --产品ID
Area_a int, --地区ID
Type_ID int, --类型ID
xs_num int,
xs_total int,
xs_date datetime default(getdate()) --日期
)

表如上,我要进行多条件查询,比如说“产品ID”有多种(可多选),并且“地区ID”有多个(可多选),还有可能根据会员ID(单选)或者
类型ID(单选),或者日期(单选)进行查询结果。
我的想法是这样的,能不能用嵌套查询,就是先查出符合“产品ID(可多选)”的结果,再在该结果中根据“地区ID(可多选)”进行查询,再得出结果,再根据上面的结果再进行其他单选的条件进行搜索。请教这样行吗?查询语句该怎么写啊?




...全文
168 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
beddevil 2009-11-29
  • 打赏
  • 举报
回复
学习
by1782 2009-03-22
  • 打赏
  • 举报
回复
接分了。。。
ws_hgo 2009-03-22
  • 打赏
  • 举报
回复
SQL code动态sql语句基本语法 
1 :普通SQL语句可以用Exec执行

eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N

2:字段名,表名,数据库名之类作为变量时,必须用动态SQL

eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格

当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名

declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错


declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确

3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中?

declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
ws_hgo 2009-03-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 by1782 的回复:]
谢谢大家!解决了

======> sdhdy
你的那种方法不错,但是不懂用,能否详细点介绍一下啊?
[/Quote]
那就快结贴
by1782 2009-03-22
  • 打赏
  • 举报
回复
谢谢大家!解决了

======> sdhdy
你的那种方法不错,但是不懂用,能否详细点介绍一下啊?
htl258_Tony 2009-03-22
  • 打赏
  • 举报
回复
--能不能用嵌套查询,就是先查出符合“产品ID(可多选)”的结果,再在该结果中根据“地区ID(可多选)”进行查询,再得出结果,再根据上面的结果再进行其他单选的条件进行搜索。
不需要,在查询的时候用关键字连接好,比如like,=,and,or,逻辑关系处理好,系统会帮你过滤出来的。
ws_hgo 2009-03-22
  • 打赏
  • 举报
回复
create table test
(
xsID int primary key identity,
Reg_ID int, --会员ID
cpID int, --产品ID
Area_a int, --地区ID
Type_ID int, --类型ID
xs_num int,
xs_total int,
xs_date datetime default(getdate()) --日期
)
select * from test where Reg_ID in ('对应的ID') and cpID in('对应的ID')
sdhdy 2009-03-22
  • 打赏
  • 举报
回复
--不必嵌套,实际上是一个WHERE语句的连接。
--用动态语句,举例。
declare @sql varchar(2000)
set @sql='select * from test where 1=1 and 产品条件 and 地区条件 and 会员条件 and 日期条件 or 其他条件'
exec (@sql)
htl258_Tony 2009-03-22
  • 打赏
  • 举报
回复
--表如上,我要进行多条件查询,比如说“产品ID”有多种(可多选),并且“地区ID”有多个(可多选),
select * from test where cpID in (1001,1002,...) and Area_a in(101,102...) 

--还有可能根据会员ID(单选)或者类型ID(单选),或者日期(单选)进行查询结果。
select * from test where Reg_ID = 10001 or xs_date = '2009-03-01'


ws_hgo 2009-03-22
  • 打赏
  • 举报
回复
先看看

22,181

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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