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') ...
随机推荐
- BOOST库 将源码作交叉编译 书籍下载
好记性不如烂笔头,BOOST库的移植,我也记录一下. 1. BOOST库 版本1.66.0 下载地址, 附书籍C++ BOOST库开发指南: https://download.csdn.net/dow ...
- 【VMware VCF】使用 VCF Import Tool 将现有 vSphere 环境导入为 VI 域。
VCF Import Tool 工具使用两种方式来帮助客户将现有的 vSphere 或 vSphere + vSAN 环境转变为 VMware Cloud Foundation 环境,分别是转换(Co ...
- 原生CSS、HTML 和 JavaScript 实现酷炫表单
一直使用 Vue/React ,习惯了用组件,偶尔想用原生三剑客写点 Demo 发现样式丑的不忍直视.最近看 掘金小册<玩转CSS的艺术之美>看到 CSS 相关的内容,发现原生 CSS 也 ...
- C++中左值和右值的区别
#include <iostream> using namespace std; // 什么是左值和右值 const 可以修饰左值和右值z // 左值:有地址的变量 // 右值:没有地址的 ...
- Oracle官方自动推荐大内存页脚本hugepages.sh
#!/bin/bash # # hugepages_settings.sh # # Linux bash script to compute values for the # recommended ...
- Rust 版本一直是 1.4 或者其它版本
Rust 版本一直是 1.4 或者其它版本 通过rustup update 升级或者 rustup default 设置版本也不行 解决方法 删除 rust-toolchain 这个东西,这个东西覆盖 ...
- CUDA编程学习 (4)——thread执行效率
1. Warp 和 SIMD 硬件 1.1 作为调度单位的 Warp 每个 block 分为 32-thread warp 在 CUDA 编程模型中,虽然 warp 不是显式编程的一部分,但在硬件实现 ...
- 低功耗4G模组:tcs3472颜色传感器示例
今天我们学习合宙低功耗4G模组Air780EP的LuatOS开发tcs3472示例,文末[阅读原文]获取最新资料1 一.简介 tcs3472颜色传感器能够读取照射到的物体的RGB三种数值,从而识别 ...
- 不容忽视的PCB测试点,关键时刻可以避免批量事故哦!
PCB测试点是啥子?请看下图: 如果你曾经用过NOKIA手机,每次你打开后盖换电池的时候,每次看到的那两排圆形的点--就是PCB测试点,or you can call it Test Poi ...
- Redis性能优化的18招
前言 Redis在我们的日常开发工作中,使用频率非常高,已经变成了必不可少的技术之一. Redis的使用场景也很多. 比如:保存用户登录态,做限流,做分布式锁,做缓存提升数据访问速度等等. 那么问题来 ...