[SQL Server]一列多行转换为字符串
在 SQL Server 中,如何将多行数据变成一个字符串保存。
| skill |
|---|
| 投石 |
| 挖矿 |
| 刮痧 |
上面三行数据想要得到结果为:投石,挖矿,刮痧 |
有两种方式:
- 拼接字符串。
- 使用
for XML
首先创建模拟用的数据
IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
BEGIN
DROP TABLE #TempTable;
END
CREATE TABLE #TempTable
(
[name] VARCHAR(MAX),
[skill] VARCHAR(MAX)
)
INSERT INTO #TempTable VALUES('钟离','投石')
INSERT INTO #TempTable VALUES('钟离','挖矿')
INSERT INTO #TempTable VALUES('钟离','刮痧')
INSERT INTO #TempTable VALUES('魈','舞蹈')
INSERT INTO #TempTable VALUES('魈','插秧')
INSERT INTO #TempTable VALUES('魈','个子矮')
INSERT INTO #TempTable VALUES('可莉','超可爱')
INSERT INTO #TempTable VALUES('可莉','超萌')
INSERT INTO #TempTable VALUES('可莉','蹦蹦炸弹')
--SELECT * FROM #TempTable

1. 使用拼接方式
DECLARE @skills varchar(MAX)
SET @skills = '' -- 用这种方式必须要初始化变量
SELECT @skills = @skills + ',' + [skill] FROM #TempTable WHERE [name] = '钟离'
SELECT @skills

2. 使用 for XML
SELECT ',' + [skill]
FROM #TempTable
WHERE [name] = '钟离'
FOR XML PATH('')

去掉开头的分隔符
可以使用 left, right, stuff 函数去掉分隔符
Stuff (@expression,@startIndex,@length,@replacrExpression)
- @expression 表示 要处理的字符串
- @startIndex 表示 开始删除字符串的位置(sql server索引从1而不是0开始)
- @lenght 表示 删除字符串的长度
- @replacrExpression 表示 删除后该位置 要替换的字符串
SELECT STUFF(@skills, 1, 1, '')

分组
分组需要嵌套
SELECT
[name]
, STUFF(
(SELECT ',' + [skill]
FROM #TempTable A
WHERE A.[name] = B.[name]
FOR XML PATH(''))
,1
,1
,''
) AS [skills]
FROM #TempTable B
GROUP BY [name]

[SQL Server]一列多行转换为字符串的更多相关文章
- sql server 使用for xml path 将1列多行转换为字符串连接起来,俗称 sql 合并字符
由于项目的原因,需要将一些记录分类汇总,但还要列出相关的明细,这样的需求我还是第一次遇到,蛋疼了,还是请求一下度娘吧.搜索一番还是有结果,请看以下例子: create table tb ([id] i ...
- sql server 使用for xml path 将1列多行转换为字符串连接起来
create table tb ([id] )) insert into tb ,'aa' union all ,'bb' union all ,'cc' union all ,'dd' union ...
- SQL Server创建表超出行最大限制解决方法
问题的现象在创建表A的时候,出现“信息 511,级别 16,状态 1,第 5 行 无法创建大小为 的行,该值大于允许的最大值 8060.”的信息提示.很奇怪,网上查了一下,是因为要插入表的数据类型的 ...
- SQL Server 关于列的权限控制
在SQL SERVER中列权限(Column Permissions)其实真没有什么好说的,但是好多人对这个都不甚了解,已经被人问了几次了,所以还是在这里介绍一下,很多人都会问,我能否单独对表的某列授 ...
- SQL Server 索引列的顺序——真的没关系吗
原文:SQL Server 索引列的顺序--真的没关系吗 翻译自:http://www.mssqltips.com/sqlservertip/2718/sql-server-index-column- ...
- SQL零星技术点:SQL中转换money类型数值转换为字符串问题
--SQL中转换money类型数值转换为字符串问题,直接转换就转为两位了,所以需要做一下处理.具体请看下述sql实例. 1 create table #test(price money) insert ...
- 统计sql server 2012表的行数
--功能:统计sql server 2012表的行数 SELECT a.name, a.object_id, b.rows, b.index_id FROM sys.tables AS a INNER ...
- SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行
ylbtech-SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行 可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表.PIVOT 通过将表达式某一列 ...
- SQL Server 2008 R2——PIVOT 行转列 以及聚合函数的选择
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
随机推荐
- JavaScript表单输入合法控制
写在前面 为了提高数据输入的容错性和数据库数据的安全性,除了后端对输入的数据的逻辑判断处理,还可以前端页面高效率处理,从而提高系统的可靠性,下面是这次项目中的自己写的一些符合当时需要的控制. 账号位数 ...
- [源码解析]PyTorch如何实现前向传播(1) --- 基础类(上)
[源码解析]PyTorch如何实现前向传播(1) --- 基础类(上) 目录 [源码解析]PyTorch如何实现前向传播(1) --- 基础类(上) 0x00 摘要 0x01 总体逻辑 0x02 废弃 ...
- rocketmq高可用集群部署(RocketMQ-on-DLedger Group)
rocketmq高可用集群部署(RocketMQ-on-DLedger Group) rocketmq部署架构 rocketmq部署架构非常多,都是为了解决一些问题,越来越高可用,越来越复杂. 单ma ...
- Win10开启剪贴板
点击任务栏下方右侧的会话窗口 点击所有设置 在搜索栏中输入剪贴板,点击进入剪贴板设置 开启剪贴板历史记录 按下组合键win + v即可呼出剪贴板
- Upload-labs通关指南(上) 1-10
Upload-labs 所有文章和随笔(随笔将不于csdn更新)将于我的个人博客(移动端暂未适配)第一时间更新. 一些网站存在文件上传接口,一旦存在这个接口就有可能存在漏洞. 文件上传漏洞的逻辑是将一 ...
- 最详细的Android SDK下载安装及配置教程-------全文均为引用
<https://www.cnblogs.com/gufengchen/p/11038029.html>
- Less-(26~28) preg_replace3
Less-26: 核心语句: 各种回显均存在. 本题相比Less-25,多屏蔽了很多符号: 首先是各种注释符 --+,#,/**/ . /[]/表示字符集合:任何出现在里面的字符均会被替换. 屏蔽 ...
- 热身训练4 Article
Article 在这个学期即将结束时,DRD开始写他的最后一篇文章. DRD使用著名的Macrohard的软件World来写他的文章. 不幸的是,这个软件相当不稳定,它总是崩溃. DRD需要在他的文章 ...
- uvm中类继承和phase
1,uvm中类继承关系如下所示 2,uvm中phase如下所示
- 51nod_1006 最长公共子序列,输出路径【DP】
题意: 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个 ...