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

SEO | 重新认识一下Meta标签

很多人忽视了HTML标签META的强大功效&#xff0c;一个好的META标签设计可以大大提高你的个人网站被搜索到的可能性&#xff0c;有兴趣吗&#xff0c;谁我来重新认识一下META标签吧&#xff01; META标签是HTML语言HEAD区的一个辅助性标签&#xff0c;它位于HTML文档头部的<H…

不知道为什么IList.Contains()总是返回FALSE

需要override bool Equals(object obj) 转载于:https://www.cnblogs.com/shiningrise/archive/2009/04/16/1436845.html

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

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

计算机课程建设 指导思想,计算机基础精品课程建设实施方案(规划).doc

计算机基础精品课程建设实施方案(规划).doc《计算机基础》精品课程建设实施方案(规划)21 世纪人类将进入信息化社会&#xff0c;知识和信息是推动信息社会发展的直接动力。利用计算机进行信息的获取、分析处理、传递交流和开发应用的能力是信息社会的人才必须具备的素养&#x…

.NET 6 中的 LINQ 更新

.NET 6 中的 LINQ 更新Intro在 .NET 6 中会针对 Linq 提供更好的支持&#xff0c;之前可能我们通过自定义扩展方法来实现的功能&#xff0c;现在官方直接支持了。Linq 将更加强大&#xff0c;更好地帮助我们简化应用程序代码。Better Index & Range supportIndex 和 Range …

SOA架构师注意的问题

什么是SOA架构设计师的职责? 那什么是企业级SOA架构设计师的具体角色呢?什么是SOA架构设计师与设计和开发人员之间的差别呢?相信这些都是使大家最容易产生迷惑的问题。举个实际的例子来说&#xff0c;当构建一个基于SOA架构的系统的时候&#xff0c;针对一个具体的 service&…

计算机如何选件组装硬盘,组装电脑如何配置 组装电脑须知事项【详解】

对于现在的It男来说&#xff0c;组装电脑是一件再小不过的事情了。如果不太懂电脑硬件的朋友&#xff0c;可能组装电脑还是有一些困难&#xff0c;下面我们简单的来说说电脑是如何组装的&#xff0c;最新的电脑配置单情况是怎么样的。电脑组装主要有选件、检查配件、点亮主板、…

crontab定时任务中文乱码问题

手动执行都很正常的的脚本&#xff0c;添加到定时任务中日志文件全是乱码经过多方查证终于找到了原因&#xff01;crontab启动的任务没有获取系统的环境变量&#xff0c;导致中文乱码解决办法&#xff1a; 在执行的脚步中添加编码方式或者添加对应的环境变量如&#xff1a;1、…

.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…

tomcat学习笔记(JDK+TOMCAT+AXIS)

总算开始动手毕设了。先搭建web service的平台吧&#xff0c;要 jdk&#xff08;1.6&#xff09;tomcat&#xff08;5.5.27&#xff09;axis&#xff08;1.4&#xff09;&#xff0c;还要下载四个独立的包&#xff1a;activation.jar mail.jar xerces.jar xmlsec-1.4.0.jar。我…

如何让 dotnetcore 在 Linux 上后台运行?

咨询区 jjmcc&#xff1a;我遇到了几个奇怪的问题不知道如何去解决&#xff0c;场景是这样的&#xff0c;我的开发环境是 windows&#xff0c;每次发布代码时我会使用 vs 的 publish 发布代码&#xff0c;然后将代码copy到 AWS EC2 上&#xff0c;然后用 dotnet 命令将程序跑起…

TI BSL in python

今天花了一下午在这个上面&#xff0c;被这个工具整没脾气了快。花点功夫记录一下。 代码是在linux下下过来的&#xff1a; bzr branch lp:python-msp430-tools 看了下&#xff0c;有我想要的器件。然后想着拿到win下工作&#xff0c;就打包拷贝过来。安装&#xff1a; > py…

不懂物理,何以谈科技?

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