通过Sql实现根据分组合并指定列内容的查询
2015-07-14 16:01
411 查看
问题: 最近在做一个项目的时候,遇到这样一个要求,模拟要求如下:
<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)ASBEGINDECLARE @SNames NVARCHAR(4000)SET @SNames = ''SELECT @SNames = @SNames+','+SName FROM StudentsInfo WHERE id = @IdRETURN STUFF(@SNames,1,1,'')ENDGO--查询SELECT id,dbo.GetStudentsInfoNamesByID(id) AS SNames FROM StudentsInfo GROUP BY id
相关文章推荐
- sybase数据库安装配置
- MySQL管理工具
- ubuntu自动备份数据库
- talend 将hbase中数据导入到mysql中
- 数据库SQL操作指令
- WinServer2008 R2下部署SQL 2008 群集(Part1)
- centos7.0安装mariadb10.0.20
- 连接BAE3.0数据库成功!
- SQL的各种连接查询
- redis显示中文结果
- mysql中timestamp,datetime,int类型的区别与优劣
- MongoDB 64bit安装和下载
- mysql定时器
- sql load的CTL文件
- mysql InnoDB Monitors 4种监控
- 【PostgreSQL】如何删除还有活动链接的数据库
- 数据库连接池
- 由于socket文件位置错误导致数据库
- redhat6.2安装oracle11g数据库
- Sql Server系列:SQL语句查询数据库中表、视图、存储过程等组成