[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 行转列 以及聚合函数的选择
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
随机推荐
- 内网渗透DC-5靶场通关
个人博客地址:点我 DC系列共9个靶场,本次来试玩一下一个 DC-5,只有一个flag,下载地址. 下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware可能存在兼容性问题.靶 ...
- Java中的函数式编程(二)函数式接口Functional Interface
写在前面 前面说过,判断一门语言是否支持函数式编程,一个重要的判断标准就是:它是否将函数看做是"第一等公民(first-class citizens)".函数是"第一等公 ...
- Vulnhub实战-grotesque3靶机👻
Vulnhub实战-grotesque3靶机 靶机地址:http://www.vulnhub.com/entry/grotesque-301,723/ 1.靶机描述 2.主机探测,端口扫描 我们在vm ...
- 吴恩达深度学习课后习题第5课第1周第3小节: Jazz Improvisation with LSTM
目录 Improvise a Jazz Solo with an LSTM Network Packages 1 - Problem Statement 1.1 - Dataset What are ...
- 使用jave2实现将wav格式的音频转换成mp3格式
最近需要用到语音合成功能,网上查阅了一番,发现可以使用腾讯云的语音合成API来完成这个功能,但是腾讯云的api返回的是wav格式的音频文件,这个格式的文件有些不通用,因此需要转换成mp3格式的文件. ...
- Spring Cloud Alibaba 使用Nacos作为服务注册中心
为什么需要注册中心? 在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用:服务管理,核心是有个服务注册表,心跳机制动态维护 : 服务注册 创建普通Spring ...
- qgis cookbook-QgsMapRendererJob学习
学习到渲染(QgsMapRendererJob),按照教程所讲总是输出不了图像,看了一下qgis的测试源码,发现少了一句话,加上后就可以输出了! from qgis.core import * fro ...
- [LGP2758]编辑距离
目录 题目 题目描述 输入格式 输出格式 输入输出样例 题目分析 状态转移方程 初始状态 结束状态 Code 题目 题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B ...
- vue混入mixin的使用,保证你看的明明白白!
场景描述 有些时候,我们发现有些组件部分功能代码是几乎是一样的. 这个时候,我们就可以将相同的逻辑代码抽离出来 此时我们的主角混入mixin就登场了 下面我们有a-test和b-test两个组件,点击 ...
- tarjan知识点梳理
tarjan在图论中还是挺重要的.这里就简要的梳理一下tarjan的知识点. tarjan算法与无向图连通性. 首先说一下图中割点和桥的定义. 桥:也称割边,定义类似,在无向图中,若去掉某条边,导致整 ...