两张表Master,Brand
其中Master.MasterId和Brand.BrandName是主外键关系MasterId MasterName BrandName
1 中国移动 全球通
1 中国移动 动感地带
1 中国移动 神州行
现在我想显示为如下格式:MasterId MasterName BrandName
1 中国移动 全球通、动感地带、神州行
有没有一条Sql可以实现的?数据库是Oracle10g,谢谢大家~
如果不能用Sql语句,其他方法如何实现呢?
其中Master.MasterId和Brand.BrandName是主外键关系MasterId MasterName BrandName
1 中国移动 全球通
1 中国移动 动感地带
1 中国移动 神州行
现在我想显示为如下格式:MasterId MasterName BrandName
1 中国移动 全球通、动感地带、神州行
有没有一条Sql可以实现的?数据库是Oracle10g,谢谢大家~
如果不能用Sql语句,其他方法如何实现呢?
解决方案 »
- load data infile方式数据无法正确导入的问题导入数据中有0开头数据不对
- 关于查询问题,求SQL
- oracle游标循环问题,高手解决!!
- ORACLE调试存储过程
- 存储过程中的“||”符号啥意思
- SQL SERVER 7的数据库中的表格怎么利用DTS向oracle 9i导入数据的时候显示表不存在呢?谁碰到过这个问题呀???
- 表中一字段为oracle的关键字,再sql语句中如何使用此字段?
- 100分!!ORA-12154: TNS: 无法处理服务名client:winxp+sp1;server:IBM小型机 AIX 4
- 请问:sybase 的存储过程转成oracle存储过程的工具是什么?
- 使用impdp导入时报错,ora39082报了好多个,导入数据库结束后发现一个表都没有导入进来,这个要怎么解决,请大神告知
- oracle入门问题
- oracle11g如何导入.dmp文件(最好是用工具,不要用命令行)?
合并列值
--*******************************************************************************************
表结构,数据如下:
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc 需要得到结果:
id values
------ -----------
1 aa,bb
2 aaa,bbb,ccc
即:group by id, 求 value 的和(字符串相加) 1. 旧的解决方法(在sql server 2000中只能用函数解决。)
--=============================================================================
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
--1. 创建处理函数
CREATE FUNCTION dbo.f_strUnite(@id int)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @str varchar(8000)
SET @str = ''
SELECT @str = @str + ',' + value FROM tb WHERE id=@id
RETURN STUFF(@str, 1, 1, '')
END
GO
-- 调用函数
SELECt id, value = dbo.f_strUnite(id) FROM tb GROUP BY id
drop table tb
drop function dbo.f_strUnite
go
/*
id value
----------- -----------
1 aa,bb
2 aaa,bbb,ccc
(所影响的行数为 2 行)
*/
--===================================================================================
2. 新的解决方法(在sql server 2005中用OUTER APPLY等解决。)
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
-- 查询处理
SELECT * FROM(SELECT DISTINCT id FROM tb)A OUTER APPLY(
SELECT [values]= STUFF(REPLACE(REPLACE(
(
SELECT value FROM tb N
WHERE id = A.id
FOR XML AUTO
), ' <N value="', ','), '"/>', ''), 1, 1, '')
)N
drop table tb /*
id values
----------- -----------
1 aa,bb
2 aaa,bbb,ccc (2 行受影响)
*/ --SQL2005中的方法2
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go select id, [values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')), 1, 1, '')
from tb
group by id /*
id values
----------- --------------------
1 aa,bb
2 aaa,bbb,ccc (2 row(s) affected) */ drop table tb
select MasterID,MasterName,stuff((select ','+BrandName from 连接表
where MasterID=a.MasterID for xml path('')),1,1,'') from 连接表 a group by MasterID,MasterName
来实现.
select masterid,mastername, [brandName]=stuff((select ','+[brandName] from tb t where masterid=tb.masterid
for xml path('')), 1, 1, '')
from tb
group by masterid ,mastername
from temp group by MasterID,MasterName