假如有表T1和T2
T1的结构为col ,col1
T2的结构为col ,col2从T1和T2通过col列做一个连接, 分别取出T1表中的col1列, T2表中的col2列,
查询出下面的结果:
col1 col2
1 A
2 D
1 B
1 C
2 E现在对这个查询的结果进行处理, 要得到如下结果:
col1 col2
1 A,B,C
2 D,E请问SQL语句应该怎么写? 谢谢.
T1的结构为col ,col1
T2的结构为col ,col2从T1和T2通过col列做一个连接, 分别取出T1表中的col1列, T2表中的col2列,
查询出下面的结果:
col1 col2
1 A
2 D
1 B
1 C
2 E现在对这个查询的结果进行处理, 要得到如下结果:
col1 col2
1 A,B,C
2 D,E请问SQL语句应该怎么写? 谢谢.
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3
GO--合并处理函数
CREATE FUNCTION dbo.f_str(@col1 varchar(10))
RETURNS varchar(100)
AS
BEGIN
DECLARE @re varchar(100)
SET @re=''
SELECT @re=@re+','+CAST(col2 as varchar)
FROM tb
WHERE col1=@col1
RETURN(STUFF(@re,1,1,''))
END
GO--调用函数
SELECT col1,col2=dbo.f_str(col1) FROM tb GROUP BY col1
--删除测试
DROP TABLE tb
DROP FUNCTION f_str
/*--结果
col1 col2
---------- -----------
a 1,2
b 1,2,3
--*/
GO
SELECT @re=@re+','+CAST(col2 as varchar) FROM tb能做到吗? 因为你指的tb无论用多表查询出来的结果来代替.col1 col2
1 A
2 D
1 B
1 C
2 E
RETURNS varchar(100)
AS
BEGIN
DECLARE @re varchar(100)
SET @re=''
SELECT @re=@re+','+CAST(col2 as varchar)
FROM tb
WHERE col1=@col1
RETURN(STUFF(@re,1,1,''))
END
GO--调用函数
SELECT tb.col1,tb.col2=dbo.f_str(tb.col1) FROM (select col1,col2 from T1,T2 where t1.col=t2.col )tb GROUP BY tb.col1
--删除测试DROP FUNCTION f_str
insert ta select 1, 'A'
union all select 2, 'D'
union all select 1, 'B'
union all select 1, 'C'
union all select 2, 'E'create function test_f(@col1 int)
returns varchar(100)
as
begin
declare @col2 varchar(100)
select @col2=isnull(@col2+',','')+col2 from ta where col1=@col1
return @col2
end查询:select distinct col1,dbo.test_f(col1) from ta
col1 col2
----------- ---------------
1 A,B,C
2 D,E(2 行受影响)