文档章节

Sql Server合并多行询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数

深圳大道
 深圳大道
发布于 2016/12/29 15:37
字数 324
阅读 15
收藏 0

示例表 tb 数据如下

id value
—————
1 aa
1 bb
2 aaa
2 bbb
2 ccc

SELECT id,
       [val] = (
           SELECT [value] + ','
           FROM   tb AS b
           WHERE  b.id = a.id FOR XML PATH('')
       )
FROM   tb AS a
显示结果
1 aa,bb,
1 aa,bb,
2 aaa,bbb,ccc,
2 aaa,bbb,ccc,
2 aaa,bbb,ccc, 

SELECT id,    
       [val]=( SELECT [value] +','    
               FROM tb AS b    
               WHERE b.id = a.id    
               FOR XML PATH('')  )    
FROM tb AS a     
GROUP BY id
显示结果
1 aa,bb,
2 aaa,bbb,ccc, 

SELECT id,    
       [val]=STUFF( (SELECT ','+[value]    
                     FROM tb AS b    
                     WHERE b.id = a.id    
                     FOR XML PATH('')) , 1 , 1 , '' )   
FROM tb AS a     
GROUP BY id
显示结果
1 aa,bb
2 aaa,bbb,ccc

STUFF 函数将字符串插入另一字符串。它在第一个字符串中从开始位置删除指定长度的字符;然后将第二个字符串插入第一个字符串的开始位置。
STUFF ( character_expression , start , length ,character_expression_insert )

SELECT id,    
       [val]= REPLACE( (SELECT [value] AS [data()]   
                        FROM tb AS b    
                        WHERE b.id = a.id    
                        FOR XML PATH('')) , ' ', ',')   
FROM tb AS a     
GROUP BY id
结果与上面一样。

解析:[data()] 这里据说是起到一个类似数组的作用,具体用法还要再查。

如果外围不用REPLACE函数包住,则返回的结果是 aaa bbb ccc ,每项之间有空格,所以最后用REPLACE函数将所有空格替换成逗号。


本文转载自:http://blog.csdn.net/smartsmile2012/article/details/9178019

深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
T-SQL中多行数据合并到一行(note)

示例表 tb 数据如下 id value ————— 1 aa 1 bb 2 aaa 2 bbb 2 ccc 第一种 SELECT id, [val]=( SELECT [value] +',' FROM tb AS b WHERE b.id = a.id FOR XML PATH('') ) FROM tb AS a ......

风之语着
2011/07/06
0
0
使用SQL2012报表生成器自定义IT资产报表

本文将介绍如何通过SQL Server 2012 SP1的报表生成器自定义报表,为了更贴近实战,本文将自定义一张IT资产报表。 一、部署IT资产管理系统 1、本文使用微软SCCM2012R2(System Center Configu...

技术小大人
2017/11/09
0
0
Oracle行转列

如果是oracle 10g以上 一个wm_concat函数就可以解决。 如果是oracle 9i以下就有点麻烦了。 表结构如下: NAME Null Type NSECCODE NOT NULL CHAR(6) CRESEARCHERCODE NOT NULL VARCHAR2(20)...

竹逸风
2016/06/22
21
0
GROUP BY 后合并指定字段的所有值

1.SELECT GROUP_CONCAT( NAME ) FROM TB GROUP BY ID; 2.SELECT ID, NAME= STUFF ((SELECT ',' + VALUE FROM TB AS T WHERE T .ID = TB.ID FOR XML PATH('')), 1, 1, '') FROM TB GROUP BY I......

dillonxiao
2018/09/01
33
0
Oracle 行转列pivot 、列转行unpivot 的Sql语句总结

转自:http://blog.csdn.net/xiaokui_wingfly/article/details/42419207 多行转字符串 这个比较简单,用||或concat函数可以实现 实际上就是拆分字符串的问题,可以使用 substr、instr、regex...

Amui
2016/06/29
720
0

没有更多内容

加载失败,请刷新页面

加载更多

Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
52分钟前
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部