关于文本汇总的SQL语句不知道怎么写~

cutesun 2003-10-13 04:00:29
姓名 购买物品
-----------------------
张三 桌子
李四 椅子
张三 书架
李四 桌子
----------------------

执行后要求如下结果
-----------------------
姓名 购买物品
-----------------------
张三 桌子,书架
李四 椅子,桌子
-----------------------
最好可以检测 购买物品是不是重复
比如张三买桌子两次 后边汇总一次就可以了
...全文
139 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
seekmoon 2003-10-14
  • 打赏
  • 举报
回复
zjcxc 元老 2003-10-13
  • 打赏
  • 举报
回复
--1.创建一个合并的函数
create function fmerg(@id varchar(10))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+购买物品 from (select distinct 购买物品 from 表A where 姓名=@id) a --过滤掉重复的物品
set @str=right(@str,len(@str)-1)
return(@str)
End
go

--调用自定义函数得到结果
select 姓名,dbo.fmerg(姓名) from 表A group by 姓名
pengdali 2003-10-13
  • 打赏
  • 举报
回复
create table #a (姓名 varchar(10),购买物品 varchar(10))

insert #a values('张三','桌子')
insert #a values('李四','椅子')
insert #a values('李四','书架')
insert #a values('张三','桌子')


declare @a varchar(8000),@b varchar(8000)

select *,cast('' as varchar(8000)) value into #临时表 from #a order by 姓名

set @b=''
update #临时表 set @a=case when @b=姓名 then @a else '' end+','+购买物品,@b=姓名,value=@a

select right(max(value),len(max(value))-1) result from #临时表 group by 姓名

go
drop table #临时表,#a
cutesun 2003-10-13
  • 打赏
  • 举报
回复
又不用自定义函数的解决方案么?
我安装的是SQL2000但是为了兼容从前的程序
兼容级别是SQL Server 7.0
没办法用自定义函数的
txlicenhe 2003-10-13
  • 打赏
  • 举报
回复
--1.创建一个合并的函数(不要重复的)
create function fmerg(@id varchar(10))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+购买物品 from (Select distinct 姓名,购买物品 from 表A) aa where 姓名=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go

--调用自定义函数得到结果
select distinct 姓名,dbo.fmerg(姓名) from 表A
pengdali 2003-10-13
  • 打赏
  • 举报
回复
create function getstr(@content varchar(10))
returns varchar(2000)
as
begin
declare @str varchar(2000)
set @str=''
select @str=@str+','+rtrim(购买物品) from 你的表 where 姓名=@content
select @str=right(@str,len(@str)-1)
return @str
end
go

--调用:
select 姓名,dbo.getstr(姓名) 购买物品 from 你的表 group by 姓名
txlicenhe 2003-10-13
  • 打赏
  • 举报
回复
--1.创建一个合并的函数(不要重复的)
create function fmerg(@id varchar(10))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+购买物品 from (Select distinct 姓名,购买物品 from 表A) aa where 姓名=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go

--调用自定义函数得到结果
select distinct 姓名,dbo.fmerg(姓名) from 表A
txlicenhe 2003-10-13
  • 打赏
  • 举报
回复
--1.创建一个合并的函数
create function fmerg(@id varchar(10))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+购买物品 from 表A where 姓名=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go

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

34,874

社区成员

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

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