SQL中合并多行记录的方法总汇


SQL中合并多行记录的方法总汇

——前几天还在抱怨:sql只有sum(数值),不能sum(字符串)

 

 

——如果不是分组统计,用select @values = @values + ',' + value也是可以的
——但是如果是分组sum(字符串),肯定不行了!
——下面是用函数实现的分组sum(字符串),只是比较“死”:表名、分组依据、待累加的字符串字段都需要预先写死!


http://blog.csdn.net/dobear_0922/archive/2008/04/22/2313839.aspx
 SQL中合并多行记录的方法总汇
 

-- =============================================================================
-- Title: 在SQL中分类合并数据行
-- Author: dobear        Mail(MSN): dobear_0922@hotmail.com
-- Environment: Vista + SQL2005
-- Date: 2008-04-22
-- =============================================================================

--1. 创建表,添加测试数据
CREATE TABLE tb(id int, [value] varchar(10))
INSERT tb SELECT 1, 'aa'
UNION ALL SELECT 1, 'bb'
UNION ALL SELECT 2, 'aaa'
UNION ALL SELECT 2, 'bbb'
UNION ALL SELECT 2, 'ccc'

--SELECT * FROM tb
/**//*
id          value
----------- ----------
1           aa
1           bb
2           aaa
2           bbb
2           ccc

(5 row(s) affected)
*/


--2 在SQL2000只能用自定义函数实现
----2.1 创建合并函数fn_strSum,根据id合并value值
GO
CREATE FUNCTION dbo.fn_strSum(@id int)
RETURNS varchar(8000)
AS
BEGIN
    DECLARE @values varchar(8000)
    SET @values = ''
    SELECT @values = @values + ',' + value FROM tb WHERE id=@id
    RETURN STUFF(@values, 1, 1, '')
END
GO

-- 调用函数
SELECT id, VALUE = dbo.fn_strSum(id) FROM tb GROUP BY id
DROP FUNCTION dbo.fn_strSum

----2.2 创建合并函数fn_strSum2,根据id合并value值
GO
CREATE FUNCTION dbo.fn_strSum2(@id int)
RETURNS varchar(8000)
AS
BEGIN
    DECLARE @values varchar(8000)    
    SELECT @values = isnull(@values + ',', '') + value FROM tb WHERE id=@id
    RETURN @values
END
GO

-- 调用函数
SELECT id, VALUE = dbo.fn_strSum2(id) FROM tb GROUP BY id
DROP FUNCTION dbo.fn_strSum2


--3 在SQL2005中的新解法
----3.1 使用OUTER APPLY
SELECT *
FROM (SELECT DISTINCT id FROM tb) A OUTER APPLY(
        SELECT [values]= STUFF(REPLACE(REPLACE(
            (
                SELECT value FROM tb N
                WHERE id = A.id
                FOR XML AUTO
            ), '<N value="', ','), '"/>', ''), 1, 1, '')
)N

----3.2 使用XML
SELECT id, [values]=STUFF((SELECT ','+[value] FROM tb t WHERE id=tb.id FOR XML PATH('')), 1, 1, '')
FROM tb
GROUP BY id

--4 删除测试表tb
drop table tb

/**//*
id          values
----------- --------------------
1           aa,bb
2           aaa,bbb,ccc

(2 row(s) affected)
*/

转载于:https://www.cnblogs.com/veigd/archive/2009/04/13/1435003.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python中文编码判别及转换

为什么80%的码农都做不了架构师&#xff1f;>>> 养成使用utf8格式的习惯&#xff0c;但是不能保证所有的代码都是utf8格式&#xff0c;所以这里提供三个函数 getCoding tran2UTF8 tran2GBK &#xff0c;分别是查看编码格式&#xff0c;转换为utf8&#xff0c;gbk格…

计算机二级中制作流程图的视频教程,流程图怎么做?1分钟教会你流程图制作方法...

流程是指在特定情景下用一系列逻辑满足特定用户需求的一种总结&#xff0c;借助流程图不仅可以梳理产品需求背后的逻辑和流程&#xff0c;还可以将新的想法和概念借助流程图这个载体分享出来&#xff0c;让整个项目参与者更好的认知产品设计的思路和逻辑。为了让职场的你更好的…

Source Generators实现简版AutoMapper

问题在业务开发中&#xff0c;我们常常需要将一个对象映射成另一个对象。例如将领域实体(UserEntity)映射成暴露给服务外部使用的数据传输对象(UserDto)。而AutoMapper则是目前主流的解决方案&#xff0c;实现类似如下代码&#xff1a;var configuration new MapperConfigurat…

15岁大学毕业,一生800多篇专著论文,双眼失明却凭一条公式称霸数学界

全世界只有3.14 %的人关注了青少年数学之旅从文明之火初燃的那一刻起数学就与之为伴从万年前“数”的产生到现代科技的迅猛发展数学不仅是窥探宇宙万物的入口也是最高智慧的结晶在漫漫的人类历史长河中各个伟大的数学家犹如布满“数学星空”中的星群他们追求最高的精确最合理的…

Java程序员应该知道的10个Eclipse调试技巧

为什么80%的码农都做不了架构师&#xff1f;>>> Eclipse是众多Java程序员实用的开发工具&#xff0c;其中开发技巧也是繁多&#xff0c;但作为优秀的Java程序员&#xff0c;需要掌握最起码的调试技巧。 1 条件断点 2 异常断点 3 监视点 4 评估/检查 5 修改变量值 6…

.NET 平台采用率的提升归功于开源

微软近日发布了一篇博客&#xff0c;以对话形式与 .NET 工程师探讨了一下有关 .NET 项目的开源经验和心得。其中指出&#xff0c;.NET 软件开发平台采用率的提升主要归功于开源。根据介绍&#xff0c;微软在 2015 年将其 CoreCLR .NET 执行引擎作为开源发布&#xff0c;并在 20…

新世纪英汉词典 | 今日最佳

全世界只有3.14 %的人关注了青少年数学之旅&#xff08;图源 荷兰鸭&#xff0c;侵权删&#xff09;

发布一个biztalk 解析Excel文件到xml消息的管道组件

<?xml:namespace prefix o /><?xml:namespace prefix v /> 此pipeline component主要功能是通过ODBC的excel驱动把excel文件转成xml的消息。excel文件可以是biztalk通过从各种适配器获得&#xff0c;比如从file、ftp、msmq、http等等适配器获得excel文件的数…

点歌软件测试自学,实际歌唱对比测试

四、实际歌唱对比测试光说不练假把戏&#xff0c;卡拉OK软件真正PK还是在实唱方面。所以我们现在就来测试一下这四款软件在真人真唱方面表现的到底怎么样。四款软件在点唱歌曲时都需要在线下载&#xff0c;经过测试&#xff0c;在普通ADSL(1M带宽)的环境下歌曲加载速度都不慢&a…

不懂物理,何以谈科技?

全世界只有3.14 % 的人关注了青少年数学之旅孩子对这个世界有着最纯粹的好奇&#xff0c;经常会问许许多多他们在日常生活中遇到的种种问题。天空为什么是蓝色的&#xff1f;电是怎么来的&#xff1f;为什么不管怎么使劲儿蹦&#xff0c;还是会落到地上&#xff1f;像小木的表妹…

硬盘结构及硬盘错误的解决方法(一)

硬盘的结构一、物理结构&#xff1a;硬盘在物理结构上由头盘组件和控制电路板两大部分组成。 ㈠ 头盘组件头盘就是磁头和盘片的意思。头盘组件包括盘体、电机、磁头等部件。所有部件密封在外壳中&#xff0c;绝对无尘、真空&#xff0c;如果你一旦开启了这个密封外壳&#xff0…

七0二所与江南计算机研究所,江南大学:一所被低估的“211”大学,2个A+学科,丝毫不输985...

文/角角老师导语&#xff1a;江南大学&#xff0c;尽管是一所“211工程”大学&#xff0c;但&#xff0c;在外省学生的意识里&#xff0c;看名字就是“野鸡大学”或者“民办大学”。其实&#xff0c;江南大学&#xff0c;实力很强&#xff0c;而是很低调&#xff0c;在教育部第…

Facebook 如何管理150亿张照片

Facebook 的照片分享很受欢迎&#xff0c;迄今&#xff0c;Facebook 用户已经上传了150亿张照片&#xff0c;加上缩略图&#xff0c;总容量超过1.5PB&#xff0c;而每周新增的照片为2亿2000万张&#xff0c;约25TB&#xff0c;高峰期&#xff0c;Facebook 每秒处理55万张照片&a…

Kubernetes全栈架构师(资源调度上)--学习笔记

▲ 点击上方“DotNet NB”关注公众号回复“1”获取开发者路线图学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第171篇原创文章目录Replication Controller和ReplicaSet无状态服务Deployment概念Deployment的创建Deployment的更新Deployment的回滚Deployment扩容和缩容…

求护士的心理阴影面积 | 今日最佳

全世界只有3.14 %的人关注了青少年数学之旅&#xff08;图源 叛逆行为艺术&#xff0c;侵权删&#xff09;

RBAC 权限入门

RBAC 权限入门 RBAC概念 RBAC&#xff1a;Role Based Access Control&#xff0c;核心是用户只和角色关联&#xff0c;而某角色可以拥有各种各样的权限并可继承。 RBAC白话介绍 RBAC有很多模型&#xff0c;最简单的就是Core RBAC。说白了就是User用户, Role角色, Permission许可…

华为服务器如何用pe重装系统,教你华为u盘重装win10系统详细图文

华为笔记本电脑的外型真的很时尚&#xff0c;以及其轻薄便捷的特色&#xff0c;迅速吸引力一大波粉丝。目前的华为笔记本电脑使用的操作系统基本是win10系统了&#xff0c;win10系统升级经常出现错误&#xff0c;下面小编就给你讲解下U盘重装win10的方法。喜欢完游戏的朋友来说…

设计模式之建造者

建造者(生成器)模式含义&#xff1a;生成器模式是一种创建型模式&#xff0c;使你能够分步奏创建复杂对象&#xff0c;可使用相同的创建代码生成不同类型和形式的对象。看图我们就能很好地理解&#xff0c;图中就是工厂中的流水线模式&#xff0c;建造者就好比整条流水线&#…

索尼服务器维护时间,索尼云服务器

索尼云服务器 内容精选换一换如果密码丢失、或创建时未设置密码&#xff0c;推荐您在控制台设置登录密码。更新后端云服务器&#xff0c;可修改字段为后端云服务器的名称和权重&#xff0c;可以为性能好的服务器设置更大的权重&#xff0c;用来接收更多的流量。如果后端云服务器…

刚刚,陶哲轩惨遭3个物理学家狠狠打脸,一条数学公式或将引起教科书改革

这波操作把数学界都炸懵了就在刚刚&#xff0c; 3 位物理学家联合数学天才、菲尔兹奖得主陶哲轩&#xff0c;彻底炸翻了数学界。左往右&#xff0c;彼得丹顿、斯蒂芬帕克、张西宁彼得丹顿&#xff08;Peter B.Denton&#xff09;&#xff0c;美国布鲁克黑文国家实验室的助理物理…