关于参数和子查询问题:关键词 in,子查询

火龙岛主 2006-04-25 04:33:53
参数表
create table cs
(
id varchar(50),
value varchar(100)
)
insert into cs values ('CredenceID','202,204');
数据表
create table sj
(
ADate date,
AID varchar(20),
AValue money
)
insert into sj values('2006-04-01','204',500)
insert into sj values('2006-04-01','202',1500)
insert into sj values('2006-04-02','201',2500)
insert into sj values('2006-04-03','202',200)
问题
查询sj表中aid满足cs表中value 条件是 id='CredenceID' 的所有数据
使用in不知道如何分割value的值
我的SQL
select *
from sj
where aid in (select top 1 value from cs where id='CredenceID')??
...全文
297 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zpj163 2006-04-27
  • 打赏
  • 举报
回复
学习中
火龙岛主 2006-04-27
  • 打赏
  • 举报
回复
参考itblog(i like i do)的思想:
使用如下语句可以解决了!
select *
from sj
where charindex(aid,(select top 1 value from cs where id ='CredenceID'))>0
谢谢各位!
sxdoujg 2006-04-27
  • 打赏
  • 举报
回复
up
火龙岛主 2006-04-26
  • 打赏
  • 举报
回复
思路非常的简单,一个表存储参数,另外一个表根据参数读去数据!用户可以随时设置参数。
又因为参数是相同类型且只有一个表的一个字段的标示!所以使用逗号","来分割,只是我在使用in的时候多余的括号系统不认!没有办法才这样做的!不知道各位面临这样的问题是如何处理的!谢谢!
Yang_ 2006-04-26
  • 打赏
  • 举报
回复
尽量把复杂问题简单化,不要把简单问题复杂化
火龙岛主 2006-04-26
  • 打赏
  • 举报
回复
实际上,当数字为字符串类型的情况下,数字类型和字符串类型是可以相互转的,这个我试验过了,我需要的是这个视图需要其他视图的调用,而且通过这个视图来形成明细数据!
不过还是很感谢,多谢交流!我试验一下!
云中客 2006-04-26
  • 打赏
  • 举报
回复
用上面的例子就已经把字符分解出来,完全不用函数来实现
如果一定要用函数,可以参考上面的例子
云中客 2006-04-26
  • 打赏
  • 举报
回复
declare @temp varchar(200)
select top 1 @temp=value from cs where id='CredenceID'
set @temp=''''+replace(@temp,',',''',''')+''''
set @temp='select * from sj where aid in('+ @temp+')'
exec(@temp)

这样最后生成的@temp=select * from sj where aid in('202','204')
而非select * from sj where aid in(202,204)
因为sj表中的AID字段是字符型,所以在某些情况下,在使用第二种情况时会出现错误,所以使用第一种情况更安全/稳定一些
火龙岛主 2006-04-26
  • 打赏
  • 举报
回复
可以使用function来分解,然后在视图中使用吗?
qizhanfeng 2006-04-26
  • 打赏
  • 举报
回复
视图中不可以调用存储过程
云中客 2006-04-26
  • 打赏
  • 举报
回复
视图中不能调用存储过程
火龙岛主 2006-04-26
  • 打赏
  • 举报
回复
Yang_(扬帆破浪) 的方法可以实现,
itblog(i like i do)的结果不正确
请问,要是在视图中怎么实现呢?
还有就是视图中可以调用存储过程吗?
regithanhu 2006-04-26
  • 打赏
  • 举报
回复
学习
itblog 2006-04-25
  • 打赏
  • 举报
回复
select *
from sj
where charindex(','+aid+',',','+(select top 1 value from cs where id ='CredenceID')+',')>0
itblog 2006-04-25
  • 打赏
  • 举报
回复
select *
from sj
where patindex('%,'+aid+',%',','+(select top 1 value from cs where id ='CredenceID')+',')>0
xeqtr1982 2006-04-25
  • 打赏
  • 举报
回复
create table cs
(
id varchar(50),
value varchar(100)
)
insert into cs values ('CredenceID','202,204')
--数据表
create table sj
(
ADate datetime,
AID varchar(20),
AValue money
)
insert into sj values('2006-04-01','204',500)
insert into sj values('2006-04-01','202',1500)
insert into sj values('2006-04-02','201',2500)
insert into sj values('2006-04-03','202',200)
/*问题
查询sj表中aid满足cs表中value 条件是 id='CredenceID' 的所有数据
使用in不知道如何分割value的值
我的SQL*/
declare @value varchar(20)
select top 1 @value=value from cs where id='CredenceID'
set @value=''''+replace(@value,',',''',''')+''''
exec('select * from sj where aid in('+@value+')')

drop table cs,sj
Yang_ 2006-04-25
  • 打赏
  • 举报
回复
简单点:

declare @sql varchar(2000)

select top 1 @sql='select * from sj where aid in ('+value+')' from cs
where id='CredenceID'

exec (@sql)
Yang_ 2006-04-25
  • 打赏
  • 举报
回复
declare @sql varchar(2000)

select @sql='select * from sj where aid in ('+value+')' from (
select top 1 value from cs where id='CredenceID'
) as t

exec (@sql)



34,588

社区成员

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

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