code vs 把所有行拼接成一行_关于SQL Server将一列的多行内容拼接成一行的问题讨论...
示例
昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 :
类别名称
AAA
企业1
AAA
企业2
AAA
企业3
BBB
企业4
BBB
企业5
我想把这个表变成如下格式:
类别名称
AAA
企业1,企业2,企业3
BBB
企业4,企业5
一开始挺头疼的(会了的肯定没有这种感觉,不会那必须是头疼啊(*^__^*) ),从网上找了点资料,算是找到一种比较简单方便的方法吧,现在大体总结一下,供大家共同学习。
原先的表名为Table_A,实现代码如下:
select
类别,
名称 = (
stuff(
(select ',' + 名称 from Table_A where 类别 = A.类别 for xml path('')),
1,
1,
''
)
)
from Table_A as A group by 类别
这里使用了SQL Server 2005版本以后加入的stuff以及for xml path,先说下在上面这句sql中的作用,然后再详细的说明一下这两个的用法。
for xml path('')
这句是把得到的内容以XML的形式显示。
stuff((select ',' + ep_name from ep_detail where ep_classes = a.ep_classes for xml path('')), 1, 1, '')
这句是把拼接的内容的第一个“,”去掉
stuff:
1、作用
stuff(param1, startIndex, length, param2)
将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。
2、参数
param1:一个字符数据表达式。param1可以是常量、变量,也可以是字符列或二进制数据列。
startIndex:一个整数值,指定删除和插入的开始位置。如果 startIndex或 length 为负,则返回空字符串。如果startIndex比param1长,则返回空字符串。startIndex可以是 bigint 类型。
length:一个整数,指定要删除的字符数。如果 length 比param1长,则最多删除到param1 中的最后一个字符。length 可以是 bigint 类型。
param2,返回类型。如果param1是受支持的字符数据类型,则返回字符数据。如果param1是一个受支持的 binary 数据类型,则返回二进制数据。
示例
select STUFF('abcdefg',1,0,'1234') --结果为'1234abcdefg'
select STUFF('abcdefg',1,1,'1234') --结果为'1234bcdefg'
select STUFF('abcdefg',2,1,'1234') --结果为'a1234cdefg'
select STUFF('abcdefg',2,2,'1234') --结果为'a1234defg'
for xml path
for xml path有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主.
假设有个表存放着学生的选课情况(stu_courses):
接下来我们来看应用FOR XML PATH的查询结果语句如下:
select stu_name,stu_course from stu_courses for xml path;
结果如下:
由此可以看出 FOR XML PATH 可以将查询结果根据行输出成XML各式!
参考文章
code vs 把所有行拼接成一行_关于SQL Server将一列的多行内容拼接成一行的问题讨论...相关推荐
- SQL Server将一列的多行内容拼接成一行的实现方法
SQL Server将一列的多行内容拼接成一行的实现方法 投稿:mdxy-dxy 这篇文章主要介绍了SQL Server将一列的多行内容拼接成一行的实现方法,需要的朋友可以参考下 下面大家先看下示例代 ...
- sql server 利用 For Xml Path('') 多行数据拼接成一个字符串
注意:这里有一种可能被弃用的方法,微软真他么坑死了,我的版本是19的,以前可以用,现在不行了 方法一(弃用): SELECT(SELECT CAST(bs_id AS VARCHAR(50)) + ' ...
- 设置oracle每行显示字符个数,Oracle一列的多行数据拼成一行显示字符-Oracle
Oracle一列的多行数据拼成一行显示字符 oracle 提供了两个函数WMSYS.WM_CONCAT 和 ListAgg函数. www.2cto.com 先介绍:WMSYS.WM_CONCAT 例: ...
- SQL不重复查找数据及把一列多行内容拼成一行
如下表: 表名:Test IDRowIDCol1Col2 11AA 21BA 31AB 41CB 1,查找表中字段重复的只查找一次 select distinct Col1 from Test ; s ...
- 怎么把好几行弄成一行_怎么把excel表格里多行变成一行数据|excel表格中让多行内容变成为一行...
excel怎么把多行数据变成一行 F1=INDEX($A$1:$E$21,ROUNDUP(COLUMN()/5,0),COLUMN()-5*(ROUNDUP(COLUMN()/5,0)-1))向后拉 ...
- sql拼接同一字段中的数据_用SQL将Oracle中同一列的多行记录拼接成一个字符
用SQL将Oracle中同一列的多行记录拼接成一个字符串 用SQL将Oracle中同一列的多行记录拼接成一个字符串 [sql] -- 原始数据 -- a 111 -- b 222 -- a ...
- 怎么把好几行弄成一行_将多行内容合并成一行的两种方式
在利用Unix操作系统在实现一些具体应用的时候,可能需要把某些显示的结果进行行与行之间的合并.如现在需要用Unix操作系统设计一个彩票软件,每一张彩票上最多可以打印五注内容.在Unix操作系统的数据文 ...
- SQL server将查询到的多行结果,拼接成字符串(列转行)
select stuff(( select ','+UserName from tabname for xml path('')),1,1,'') as UserNamestr 注释:查询出tabna ...
- 数据库SQL Server 如何将数据库表名等前缀转换成dbo
数据库SQL Server 如何将数据库表名前缀,框架名前缀,视图前缀,存储过程前缀转换成dbo exec sp_msforeachtable 'sp_changeobjectowner ''?'', ...
最新文章
- wpf scrollviewer 两个事件相互影响_WPF绘制3D效果显示密集立体集装箱
- java jackson json_使用Java和Jackson将Json序列化为通用结构而无...
- python自动化开发教程_Python自动化开发实战视频课程-全新基础篇_Python教程
- rfcomm工具的使用方法 创建/dev/rfcomm0 并检测
- Java Map集合
- 微软发布正式版SQL Server 2016
- 线段树专辑—— pku 3468 A Simple Problem with Integers
- centos6.5最小化安装
- 谭浩强 c语言源码下载,谭浩强C语言教材源代码第二章
- 扫雷android源代码,Android实现扫雷小游戏
- 单片机蜂鸣器奏乐代码例子
- 民间股神:上海殷保华的股票操盘手奇人绝技
- Matpower软件简介和参数介绍
- 研究生学习的阶段总结
- Unity学习笔记(六)——顶点动画
- Android8.0源码解析——Activity的启动过程
- 4、基本命令-系统管理
- 伯德图 matlab,Matlab/Simulink中bode图的画法
- Moveit!入门——古月居机械臂开发笔记(二)
- 【Linux】安装 Ubuntu18.04 全程实录(安装 NVIDIA 驱动,安装主题美化,安装应用程序,网易云无法启动,GoldenDict 音标显示不正常)