sql中怎样把同一张表中相同字段的内容合并为一条记录?

我的表现在是这样的:
客户id 购买产品id
1 123
1 124
1 125
1 126
2 168
2 169
想让表转变成:
客户id 购买产品id
1 123,124,125,126
2 168,169

也就是说把一个客户购买的产品合并显示在一条记录中。

谢谢!!
我现在在用access2007。谢谢!
大家说的应该是用sql server的解决方法吧。
我现在在用access2007, 似乎是有些不同,恳请大家指点,菜鸟在这里谢谢大家!

--sql 2000可以用函数哦
create FUNCTION udf_pin(@客户id INT )
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @s VARCHAR(100)
SELECT @s=isnull(@s+',','')+rtrim(购买产品ID) FROM tb WHERE 客户id=@客户id
RETURN @s
END;
GO
SELECT 客户id,dbo.udf_pin(客户id) AS 购买产品ID
FROM tb
GROUP BY 客户id

--sql2005一句话搞定
select 客户ID,
购买产品ID=stuff((select ','+rtrim( 购买产品id) from tb where t.客户id=客户id order by 购买产品id for xml path('')),1,1,'')
from tb t
group by 客户id
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-24
产品ID的数目是不是恒定的?
可以用游标实现

declare @客户id nvarchar(1000);
select @客户id=isnull(@客户id+N',[','[') + ltrim(rtrim(convert(char,客户id)))+']'
from (select distinct 客户id from TestTable) A
--print @客户id
declare @sql nvarchar(1000)
set @sql=N'select pvt.* from TestTable
pivot
(
min([ 购买产品id ])
for 客户id in ('+@客户id +N')
) as pvt'
--print @sql
exec(@sql)
第2个回答  2010-08-24
一定要sql吗 存储过程可以吗

--过程test
create or replace procedure test as
cursor cur_id is select distinct id from tab;
cursor cur_pid(v_id tab.id%type) is select pid from tab where id=v_id;
begin
dbms_output.put_line('客户'||' 产品');
for v_cur_id in cur_id loop
dbms_output.put(v_cur_id.id||' ');
for v_cur_pid in cur_pid(v_cur_id.id) loop
dbms_output.put(' '||v_cur_pid.pid);
end loop;
dbms_output.put_line('');
end loop;
end;

--调用
call test();
第3个回答  2010-08-24
什么数据库?什么版本?

sql中怎样把同一张表中相同字段的内容合并为一条记录?并统计数量
12SELECT Customer_ID,Customer_Name,STUFF((SELECT ','+Linkman_Name FROM Linkman WHERE Customer_ID=Customer.Customer_ID FOR XML

sql中怎样把同一张表中相同字段的内容合并为一条记录?
--sql 2000可以用函数哦 create FUNCTION udf_pin(@客户id INT )RETURNS VARCHAR(100)AS BEGIN DECLARE @s VARCHAR(100)SELECT @s=isnull(@s+',','')+rtrim(购买产品ID) FROM tb WHERE 客户id=@客户id RETURN @s END;GO SELECT 客户id,dbo.udf_pin(客户id) AS 购买产品ID FROM tb GRO...

SQL中怎样把同一张表中相同字段的内容合并为一条记录?
SELECT Customer_ID,Customer_Name,STUFF((SELECT ','+Linkman_Name FROM Linkman WHERE Customer_ID=Customer.Customer_ID FOR XML PATH('')),1,1,'') Linkman_Name FROM Customer

sql查询中怎么将两条内容相同的记录显示成一条
sql查询中两条内容相同的记录显示成一条可以用group by语句或distinct语句来实现。如,test表中有如下数据:group by的方法:select id,name from test group by id,name;查询结果:distinct的方法:select distinct id,name from test;查询结果:...

SQL如何将同一记录的多个字段的值合并到一个字符串中,然後再跟别的SQL...
可以用连接符号 || 或者& 我的是Oracle || 可以 select date||depart||name from A union all select date||note from B

...字段如何对查询结果进行操作将id相同的合并为一条数据
建表 create table class(classid int,classname varchar(10),teacherid int)insert into class values (1,'一班',1)insert into class values (1,'一班',2)insert into class values (2,'三班',1)create table teacher(teacherid int,teachername varchar(10))insert into teacher values (1...

如何把SQL中同一表的三条记录合并为一条?SQL语句怎么写?
declare @set varchar(8000)SELECT @set=isnull(@set,'')+名称+'\/' from Name select substring(@set,0,len(@set)-1)--- 中国\/云南省\/保山市\/腾冲 根据自己的业务情况再加where 条件

sql一对多的时候,把相同行的数据合并成一行,类似excel合并单元格的...
select SUM([需要求和的字段名称]) from [要求和的表名]

SQL如何将某一列中相同的数据合并
SELECT GROUP_CONCAT( 字段名 ) FROM 表名 并将该字段 在WHERE条件下 GROUP BY

sql数据库中,如何将一个表中的多列数字合并为一列
一般情况下,我们将由不同栏位获得的资料串连在一起,每一种资料库都有提供方法来达到这个目的:MySQL: CONCAT()Oracle: CONCAT(), || SQL Server: + 其实对于非程序员,可以利用excel或是access搞定。在excel表格中就可以实现:D1=concatenate(a1,b1,c1);或是 D1= A1&B1&C1。在access中,D...

相似回答