SQLServer使用STUFF-for xml path实现结果行列转置
源数据:

场景1: 查出用户的爱好,并进行行列转置
select cname, stuff((select ','+f.favor from tb_favor f where f.userid=b.userid FOR XML Path('')),1,1,'') favor from tb_user b
这里使用了SQL Server 2005版本以后加入的stuff以及for xml path:
FOR XML Path('') 这句是把得到的内容以XML的形式显示。
stuff((select ','+f.favor from tb_favor f where f.userid=b.userid FOR XML Path('')),1,1,'') 这句是把拼接的内容的第一个“,”去掉。
看一下结果:

场景2:将情景1的favor结果,变成中文。 这需要先拆了,再拼接一次。
demo表: 这次需要将favor通过tb_favorCname表,替换成中文

sql语句:
select cname 姓名, stuff((select '、'+fc.cname from tb_favorCname fc,dbo.FnSplitStr((select favor from tb_demo1 d where d.username=bb.username ), ',') tt where fc.favor=tt.F1 for xml path('')),1,1,'') 兴趣 from tb_user bb
结果:

将逗号拆掉的函数:
ALTER FUNCTION [dbo].[FnSplitStr] ( @str nvarchar(max), @split nchar(1)
) RETURNS @temp TABLE ( F1 nvarchar(500) ) AS
BEGIN
DECLARE @ch AS nvarchar(500); DECLARE @i_p as int; DECLARE @i_c as int; DECLARE @len as int; set @i_p = 0; set @i_c = CHARINDEX(@split, @str); set @len = len(@str); if @len > 0
begin
while @i_c <> 0
begin
set @ch = substring(@str, @i_p + 1, @i_c - @i_p - 1); INSERT @temp VALUES (@ch); set @i_p = @i_c; set @i_c = CHARINDEX(@split, @str, @i_c + 1); end
set @ch = substring(@str, @i_p + 1, @len - @i_p); INSERT @temp VALUES (@ch); end
RETURN
END
SQLServer使用STUFF-for xml path实现结果行列转置的更多相关文章
- SQLServer中sql for xml path 的用法
我们通常需要获取一个多行的某个字段拼出的字符串,我们可以使用for xml path进行处理:下面将介绍for xml path的具体用法: 创建测试表&插入测试数据 在数据库中新增测试表 C ...
- sqlserver -- 学习笔记(八)体验charindex、stuff 和 for xml path在实际问题中的应用及几个问题的探讨
写在前面 之前做了个微信端顾客扫码评价员工的功能,除了打分数,还可以打标签. 需要统计分数和统计各个员工每种标签被点击的次数. 后来加了个要求,需要查看客户对某个员工一次服务所打出的标签组合. 在不 ...
- SQLSERVER利用FOR XML PATH实现分组拼接字符串
首先看一下数据结构表 IF(OBJECT_ID('tempdb..#tProduct')IS NOT NULL) DROP TABLE #tProduct SELECT * INTO #tProduc ...
- SqlServer 中 for xml path 相关
表结构: typename varchar(50) typedesc varchar(50) 示例 SQL 语句: SELECT '{"'+TypeName, '":"' ...
- SQLServer中的cross apply和FOR XML PATH
参考: FOR XML PATH:http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html cross apply:http ...
- sqlserver - FOR XML PATH
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...
- SqlServer——for xml path
for xml path 就是将 sql 查询出来的内容以XML的格式显示出来.参考网站MSDN:将 PATH 模式与 FOR XML 一起使用. 先创建测试用的表格: create table SZ ...
- sqlserver中 多条数据合并成一条数据 (stuff 与 for xml path 连用)
SQL 列转行,即多行合并成一条 需求:按照分组,将多条记录内容合并成一条,效果如下: 数据库示例: CREATE TABLE [t2]([NID] [bigint] NULL,[district ...
- 问题:sqlserver有没有类似Oracle的LISTAGG;结果: 灵活运用 SQL SERVER FOR XML PATH
灵活运用 SQL SERVER FOR XML PATH FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前 ...
- 多列转1列 SqlServer 实现oracle10g的 wmsys.wm_concat()--for xml path('')
有这么一个表 )) , 'aa') , 'bb') , 'aaa') , 'bbb') , 'ccc') , 'ddd') , 'fff') ...
随机推荐
- QT框架实现自定义形状截图效果
文章目录 QT框架普通截图运行效果 QT框架系统级热键的原理 注册热键 反注册热键 获取系统级唯一的整数ID 删除系统级唯一整数ID 原生事件过滤器 QT框架截图的原理 截图窗口 拉框操作 系统剪切板 ...
- 【赵渝强老师】Weblogic域和域的组成
一.什么是Weblogic WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于Java EE架构的中间件,WebLogic是用于开发.集成.部署和 ...
- cf1632 Codeforces Round #769 (Div. 2)题解
A ABC 水题0.0 B Roof Construction 构造题,经过实验构造出了0的右边是不超过\(n\)的最大的\(2^k\rightarrow n\),左边是\(2^k-1,2^k-2,. ...
- 2024年2月中国数据库排行榜:PolarDB夺魁首登顶,TiDB攀升回探花
银装素裹覆大地,春意初醒待来临.2024年2月墨天轮中国数据库流行度榜单出炉,表现最亮眼的无疑是PolarDB,其自23年7月以来一路高歌猛进,此次更是一举夺魁,彰显了云原生数据库的蓬勃发展态势,Oc ...
- 墨天轮专访星环科技刘熙:“向量热”背后的冷思考,Hippo如何打造“先发”优势?
导读: 深耕技术研发数十载,坚持自主可控发展路.星环科技一路砥砺前行.坚持创新为先,建设了全面的产品矩阵,并于2022年作为首个独立基础软件产品公司成功上市.星环科技在今年的向星力•未来技术大会上发布 ...
- promise是什么?它有哪些作用?
promsie是es6新增的特性,用来解决回调地狱的问题(异步深层嵌套问题) : 也叫做期约函数,是js内部的构造函数 ,可以当作一个容器,里面保存着某个未来才会结束的事件,比如异步请求 :
- JOI 2020 Final
A - 長いだけのネクタイ (Just Long Neckties) JOI 公司开了一个派对.有 \(n + 1\) 条领带,第 \(i\) 条领带的长度是 \(a_i\).有 \(n\) 名员工, ...
- 基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS
容器作为近些年最火热的后端技术,加快了很多企业的数字化转型进程.目前的企业,不是在使用云原生技术,就是在转向云原生技术的过程中.在容器化进程中,如何保持业务的平稳迁移,如何将现有的一些服务设施一并进行 ...
- WinSCP 脚本实现将 jar 包一键上传 Ubuntu 并 docker 部署
准备 首先,在 Ubuntu 写一个.sh 脚本用于自动更新 jar 包的 docker 容器和镜像,然后在 Windows 写一个.bat 脚本用于上传 jar 包并运行.sh 脚本. deploy ...
- Linux系统管理-yum源配置
一.本地光盘yum源配置 1.创建挂载点 [root@localhost ~]# mkdir /mnt/cdrom 2.配置自动挂载本地光盘 [root@localhost ~]# vim /etc/ ...