导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

重新开贴,SQL查询

MeChecksV 2008-01-11 11:30:15
id dqfzlid
68 70
69 70
70 70
80 69
81 69


传递id 68,80,81

要得出这样的结果

dqfzlid id

69 80,81
70 68
...全文
40 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
areswang 2008-01-11
1
回复
MeChecksV 2008-01-11
id 表示小鼠的编号 dqfzlid 表示繁殖笼号

传递id 68,80,81
也就是传递了3只小鼠得出繁殖笼的信息
dqfzlid id
69 80,81
70 68

id只反映传递的小鼠 不需要繁殖笼里全部的
回复
冷箫轻笛 2008-01-11

--环境
create table test
(
id int,
did int
)
insert into test select 68, 70
insert into test select 69, 70
insert into test select 70, 70
insert into test select 80, 69
insert into test select 81, 69

--建立辅助函数
create function f_connstr
(
@col int,
@pro varchar(100)
)
returns varchar(100)
as
begin
declare @str varchar(100)
set @str = ''
select @str = @str + ',' + cast(id as varchar)
from test
where did = @col and ',' + @pro + ',' like '%,'+ cast(id as varchar) +',%'

return stuff(@str,1,1,'')
end

--声明参数变量
declare @pro varchar(100)
set @pro = '68,80,81'

--查询
select distinct did,dbo.f_connstr(did,@pro) as id
from test

--结果
69 80,81
70 68

--删除环境
drop function f_connstr
drop table test
回复

--函数
create function fn_Ids(
@dqfzlid int
)
returns varchar(200)
as
begin
declare @Ids varchar(200)
set @Ids=''
select @Ids=@Ids+','+rtrim(id) from tab where dqfzlid =@dqfzlid
if @Ids<>''
set @Ids=stuff(@Ids,1,1,'')
return @Ids
end
go

--存储过程
create proc pr_Query
@Ids varchar(200)
as
exec('select dqfzlid,dbo.fn_Ids(dqfzlid) as Id from tab where id in ('+@Ids+') group by dqfzlid')
go

--调用
exec pr_Query '68,80,81'

回复
没看出规律
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告