两行数据合并成一行的SQL查询语句

jianghu 2006-08-25 03:12:27
我有以下的这张表:
type name qty
-----------------------
fruit apple 20
fruit balana 25
office photo 15
office phone 25

查询后的结果为:
type name qty
----------------------------
fruit apple+balana 45
office photo+phone 40

也就是将典型的两行数据写成一行数据;
请问一下,这种SQL语句应该怎么写啊?
急切盼望中!我写不出来啊!
...全文
1202 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dba_sunny 2006-08-25
  • 打赏
  • 举报
回复
--生成测试数据
create table t(type varchar(10),name varchar(10),qty int)
insert into t select 'fruit ','apple ',20
insert into t select 'fruit ','balana',25
insert into t select 'office','photo ',15
insert into t select 'office','phone ',25
go

--创建用户定义函数
create function f_str(@type varchar(10))
returns varchar(100)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+'+'+name from t where type = @type
set @ret = stuff(@ret,1,1,'')
return @ret
end
go


--执行
select type,name=dbo.f_str(type),qty=sum(qty) from t group by type
go

--输出结果 自己看


--删除测试数据
drop function f_str
drop table t
go
jianghu 2006-08-25
  • 打赏
  • 举报
回复
---------------------------------------------------------------------------------
libin_ftsafe(子陌红尘:当libin告别ftsafe) ( )

1、SQL语句不长,不过要先创建字符串sum的用户函数。

2、在SQL Server 2000环境下,没有太好的办法,如果是SQL Server 2005,借鉴楼上贴。
---------------------------------------------------------------------------------

谢谢你的解答,但我相信关于这一点一定是有更好的办法!
我再想想吧!
我坚信肯定有更短的,更方便的语句!
等我找到后我发信息给你吧!
请告之邮箱!


子陌红尘 2006-08-25
  • 打赏
  • 举报
回复
SUM(CASE ...)?

Impossible!

字符串类型列怎么可能用聚合函数SUM()呢,楼主一定是弄错了。
jianghu 2006-08-25
  • 打赏
  • 举报
回复
用的是SQL2000,上次看到有人用一句就可以实现,好像是SUM(CASE....)等等,看的有一段时间了,可是现在忘记了!
子陌红尘 2006-08-25
  • 打赏
  • 举报
回复
1、SQL语句不长,不过要先创建字符串sum的用户函数。

2、在SQL Server 2000环境下,没有太好的办法,如果是SQL Server 2005,借鉴楼上贴。
zlp321002 2006-08-25
  • 打赏
  • 举报
回复
你用sql 2005 吗?

2005 可以用 clr 一句实现。
jianghu 2006-08-25
  • 打赏
  • 举报
回复
有没有简单一点的?
这个太长了点,因为我还要用我汇总出来的数据跟其它的表作INNER JOIN呢!
希望可以用一条语句来实现!
子陌红尘 2006-08-25
  • 打赏
  • 举报
回复
--生成测试数据
create table t(type varchar(10),name varchar(10),qty int)
insert into t select 'fruit ','apple ',20
insert into t select 'fruit ','balana',25
insert into t select 'office','photo ',15
insert into t select 'office','phone ',25
go

--创建用户定义函数
create function f_str(@type varchar(10))
returns varchar(100)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+'+'+name from t where type = @type
set @ret = stuff(@ret,1,1,'')
return @ret
end
go


--执行
select type,name=dbo.f_str(type),qty=sum(qty) from t group by type
go

--输出结果 自己看


--删除测试数据
drop function f_str
drop table t
go
子陌红尘 2006-08-25
  • 打赏
  • 举报
回复
参考这个:

--生成测试数据
create table 表(部门 int,人员 varchar(20))
insert into 表 select 1,'张三'
insert into 表 select 1,'李四'
insert into 表 select 1,'王五'
insert into 表 select 2,'赵六'
insert into 表 select 2,'邓七'
insert into 表 select 2,'刘八'
go

--创建用户定义函数
create function f_str(@department int)
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+','+人员 from 表 where 部门 = @department
set @ret = stuff(@ret,1,1,'')
return @ret
end
go


--执行
select 部门,人员=dbo.f_str(部门) from 表 group by 部门 order by 部门
go

--输出结果
/*
部门 人员
---- --------------
1 张三,李四,王五
2 赵六,邓七,刘八
*/


--删除测试数据
drop function f_str
drop table 表
go

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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