日期:2014-05-17  浏览次数:20807 次

有没办法直接用sql把第一列相同的数据,第二列不同的用“,”连接起
比如
KEY     VALUE
1      "A"
2      "B"
1      "C"
1      "D"

用sql语句查询出来后,能不能直接显示成
KEY   VALUE
1     "A,C,D"
2     "B"

我在其他地方看到可以直接写个函数来调用,但不直到可否直接sql语句实现同样的功能
create function [dbo].[f_str](@id int) returns nvarchar(1000) 
as 
begin 
declare @str nvarchar(1000) 
set @str = '' 
select @str = @str + ',' + cast(value as nvarchar(900)) from tb where id = @id 
set @str = right(@str , len(@str) - 1) 
return @str 
end 
go 
--调用函数 
select id , value = dbo.f_str(id) from tb group by id 

------解决方案--------------------
发错论坛了吧,转到SQLSERVER那边问问。

Oracle这边可以用wm_concat, pivot或者decode之类的函数实现。
http://blog.csdn.net/yy_mm_dd/article/details/3182953
------解决方案--------------------
wm_concat()  group by 
------解决方案--------------------
create table tt(
    KEY INT,
    VALUE VARCHAR(20)   
);

insert into tt values(1,'A');
insert into tt values(2,'B');
insert into tt values(1,'C');
insert into tt values(1,'D');
COMMIT;

SELECT tt.key, WMSYS.WM_CONCAT(tt.VALUE) VALUE From tt GROUP BY tt.key;