通过Sql实现根据分组合并指定列内容的查询

2014-11-24 08:38:39 ? 作者: ? 浏览: 2

通过Sql实现根据分组合并指定列内容的查询
问题:
www.2cto.com
  最近在做一个项目的时候,遇到这样一个要求,模拟要求如下:  
ID SName
1 张三
1 李四
2 刘六
2 王五
要的结果是
ID name
1 张三,李四
2 刘六,王五
即按ID组查询,并将相同的ID对应SName内容通过逗号合并
解决思路:
  通过传递不同的id给函数,查询出组合的SName并返回。
--创建测试表
IF NOT EXISTS(SELECT * FROM sysobjects WHERE id=OBJECT_ID(N'StudentsInfo') AND OBJECTPROPERTY(id,N'IsUserTable')=1)
CREATE TABLE StudentsInfo
(
Id INT,
SName NVARCHAR(20)
)
GO
--添加测试数据 www.2cto.com
INSERT INTO StudentsInfo VALUES (1,'张三')
INSERT INTO StudentsInfo VALUES (1,'李四')
INSERT INTO StudentsInfo VALUES (2,'刘六')
INSERT INTO StudentsInfo VALUES (2,'王五')
GO
--创建函数
IF EXISTS(SELECT * FROM sysobjects WHERE id=OBJECT_ID(N'GetStudentsInfoNamesByID') AND OBJECTPROPERTY(id,N'IsScalarFunction')=1)
DROP FUNCTION GetStudentsInfoNamesByID
GO
CREATE FUNCTION GetStudentsInfoNamesByID(@Id INT)
RETURNS NVARCHAR(4000)
AS
BEGIN
DECLARE @SNames NVARCHAR(4000)
SET @SNames = ''
SELECT @SNames = @SNames+','+SName FROM StudentsInfo WHERE id = @Id
RETURN STUFF(@SNames,1,1,'')
END
GO
--查询
SELECT id,dbo.GetStudentsInfoNamesByID(id) AS SNames FROM StudentsInfo GROUP BY id
总结:
  整体思路还是比较简单的,但是很多时间都不怎么使用函数进行处理,这里也算抛砖引玉做个记录。至于上面的效率问题怎么样,就暂不做考虑了。
-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: