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

来源:互联网 发布:怎么求逆矩阵 编辑:程序博客网 时间:2024/06/10 23:07


问题:

  最近在做一个项目的时候,遇到这样一个要求,模拟要求如下: 

<pre name="code" class="html">
<pre name="code" class="sql">ID  SName   张三   李四   刘六   王五要的结果是ID name 张三,李四 刘六,王五即按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--添加测试数据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 GetStudentsInfoNamesByIDGOCREATE FUNCTION GetStudentsInfoNamesByID(@Id INT)    RETURNS NVARCHAR(4000)ASBEGIN    DECLARE @SNames NVARCHAR(4000)    SET @SNames = ''    SELECT @SNames = @SNames+','+SName FROM StudentsInfo WHERE id = @Id    RETURN STUFF(@SNames,1,1,'')ENDGO    --查询SELECT id,dbo.GetStudentsInfoNamesByID(id) AS SNames FROM StudentsInfo GROUP BY id



0 0
原创粉丝点击