求最高效的sql语句写法。

Keyln 2003-10-10 11:05:17
Id groupid user
1 1 阿明
2 1 阿江
3 2 阿水
4 2 阿狂
………………….
………………….

Id groupname
1 教务处
2 总务处
……………..
………………
如果收件人为﹕教务处﹑阿水 。那幺发送后﹐因为阿明﹑阿江都为教务处﹐所以说阿明﹑阿江﹑阿水都会收到文件。这句sql语句最好怎幺写。即实际把收件人转换成=阿明﹑阿江﹑阿水
...全文
49 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
txlicenhe 2003-10-10
  • 打赏
  • 举报
回复
若组别不只一个,如下调用:
declare @str varchar(100),@id int,@groupn varchar(10)
set @str = '教务处、阿水、总务处'
declare cur cursor for
Select [id], groupname from 表2 where charindex(groupname,@str) > 0
open cur
fetch next from cur into @id,@groupn
while @@fetch_status = 0 and @@rowcount>0
begin
set @str = replace(@str,@groupn,dbo.fmerg(@id))
fetch next from cur into @id,@groupn
end
close cur
deallocate cur
select @str

----------------------------------------------------------------------------------------------------
阿明、阿江、阿水、阿水、阿狂

(所影响的行数为 1 行)

zjcxc 2003-10-10
  • 打赏
  • 举报
回复
最高效率,用自定义函数,

--创建一个合并的函数,@gid为组号,@spcchr为姓名之间的分隔符
create function f_merg(@gid int,@spcchr varchar(10))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+@spcchr+[user] from 表A where groupid=@gid
set @str=substring(@str,len(@spcchr)+1,8000)
return(@str)
End
go

--调用自定义函数得到结果,名称之间用空格分隔
select groupid,dbo.f_merg(groupid,' ') from 表A group by groupid
txlicenhe 2003-10-10
  • 打赏
  • 举报
回复
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
阿明、阿江、阿水

(所影响的行数为 1 行)
txlicenhe 2003-10-10
  • 打赏
  • 举报
回复
create table 表1(id int,groupid int,[user] varchar(10))
insert 表1
Select 1,1,'阿明'
Union all select 2,1,'阿江'
Union all select 3,2,'阿水'
Union all select 4,2,'阿狂'

create table 表2 (id int,groupname varchar(10))
insert 表2 select 1,'教务处'
Union all select 2,'总务处'


--1.创建一个合并的函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+'、'+[user] from 表1 where groupid=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go


declare @str varchar(100),@id int,@groupn varchar(10)
set @str = '教务处、阿水'
Select @id = [id],@groupn = groupname from 表2 where charindex(groupname,@str) > 0
Select replace(@str,@groupn,dbo.fmerg(@id))


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
阿明、阿江、阿水

(所影响的行数为 1 行)

aierong 2003-10-10
  • 打赏
  • 举报
回复
自己创建合并函数
arrow_gx 2003-10-10
  • 打赏
  • 举报
回复
直接发给 教务处﹑阿水 不就可以了,

这个问题有点不清楚,你得SQL 语句要实现什么?表结构?要更新那个表??
txlicenhe 2003-10-10
  • 打赏
  • 举报
回复
--1.创建一个合并的函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+'、'+[user] from 表A where groupid=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go

--调用自定义函数得到结果
select distinct a.groupid,dbo.fmerg(a.groupid) from 表A a
join 表B b on a.groupid = b.id where b.groupname = '教务处'
txlicenhe 2003-10-10
  • 打赏
  • 举报
回复
--1.创建一个合并的函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+'、'+[user] from 表A where groupid=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go

--调用自定义函数得到结果
select distinct groupid,dbo.fmerg(groupid) from 表A

22,209

社区成员

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

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