ID VALUE1 VALUE2
1 a 0.1
1 b 0.2
1 c 0.3
2 a 0.1
2 c 0.3
现在我想取得的结果是
ID result1 result2
1 a、b、c 0.1、0.2、0.3
2 a、c 0.1、0.3
其中value1和value2的个数是不定的,只能用一个sql语句实现
**********************************************************************************
create function f_str(@id varchar(10))
returns varchar(500)
as
begin
declare @s varchar(500)
set @s=''
select @s=@s+'、'+rtrim(value2) from table where id=@id
return stuff(@s,1,2,'')
end
GO
create function f_str2(@id varchar(10))
returns varchar(500)
as
begin
declare @s varchar(500)
set @s=''
select @s=@s+'、'+rtrim(value1) from table where id=@id
return stuff(@s,1,2,'')
end
GO
select id,f_str2(id) as result1,f_str(id) as result2 from table where id in (select min(id) from table group by id)
**********************************************************************************
CREATE TABLE tb([编号] int, [课程] varchar(100), [分数] int)
INSERT INTO tb
SELECT 1, 'a', 80
UNION ALL SELECT 2, 'c', 85
UNION ALL SELECT 1, 'b', 90
UNION ALL SELECT 2, 'b', 60
UNION ALL SELECT 3, 'a', 70
GO
CREATE FUNCTION GetNew(@Code INT, @Flg TINYINT)
RETURNS VARCHAR(10)
AS
BEGIN
DECLARE @re VARCHAR(10)
SET @re = ''
IF @Flg = 1
SELECT @re = @re + 课程 + '、' FROM tb WHERE 编号 = @Code
ELSE IF @Flg = 2
SELECT @re = @re + CAST(分数 AS VARCHAR) + '、' FROM tb WHERE 编号 = @Code
RETURN LEFT(@re, LEN(@re) - 1)
END
GO
SELECT DISTINCT 编号, dbo.GetNew(编号, 1) AS 课程, dbo.GetNew(编号, 2) AS 分数 FROM TB
DROP FUNCTION GetNew
DROP TABLE TB
本文介绍了一种使用SQL聚合函数结合字符串处理技巧的方法,来实现对特定字段的值进行汇总并以逗号分隔的形式返回。通过创建自定义函数f_str和f_str2,可以有效地将多个值组合成一个字符串,并展示了如何在一个SQL查询中同时应用这些函数。
2172

被折叠的 条评论
为什么被折叠?



