首页 > 数据库 >SQLServer使用STUFF-for xml path实现结果行列转置.220507

SQLServer使用STUFF-for xml path实现结果行列转置.220507

时间:2025-01-06 17:13:08浏览次数:1  
标签:xml set 转置 SQLServer len favor str tb select

源数据:
assets/SQLServer使用STUFF-for xml path实现结果行列转置.220507/file-20250106165931074.png

场景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,'') 这句是把拼接的内容的第一个“,”去掉。

看一下结果:
assets/SQLServer使用STUFF-for xml path实现结果行列转置.220507/file-20250106170004759.png

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

demo表:  这次需要将favor通过tb_favorCname表,替换成中文
assets/SQLServer使用STUFF-for xml path实现结果行列转置.220507/file-20250106170034505.png

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

结果:
assets/SQLServer使用STUFF-for xml path实现结果行列转置.220507/file-20250106170128250.png

将逗号拆掉的函数:

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
    ```

标签:xml,set,转置,SQLServer,len,favor,str,tb,select
From: https://www.cnblogs.com/amadeuslee/p/18655730

相关文章

  • SQLServer单表无缝转换到MySQL.220605
    场景:SQLServer单表结构,无缝转换到MySQL方法:1.Navicat-右键需要导出的数据表-逆向表到模型2.弹出来的模型窗口里,选择转换模型为 默认MySQL8.0确认3.新弹出的模型窗口 -选择 导出SQL 即可。......
  • 骨折检测数据集,使用yolo,coco json,voc xml格式对1943张X片子照片进行标注,可识别骨折的
    1943总图像数 数据集分割训练组70%        1358图片有效集20%        381图片测试集10%        204图片预处理调整大小: 拉伸至640x640增强每个训练示例的输出: 290°旋转: 顺时针、逆时针、上下颠倒......
  • C语言操作XML文件的原理与实践
    摘要XML(可扩展标记语言)因其灵活性和标准化特性,被广泛应用于数据交换、配置文件、Web服务等领域。C语言作为一种高效、底层的编程语言,在处理XML数据方面也有广泛的应用。本文将深入探讨C语言操作XML的技术和方法,帮助读者掌握C语言处理XML的技巧。主要内容包括XML的基本概念......
  • sqlserver2008r2 突然断电导致mdf文件损坏
    系统版本:windows2008r2数据库版本:sqlserver2008r2问题现象:突然断电导致数据库无法打开,报其中一个附加mdf文件损坏。客户允许丢失一部分数据。创建同名数据库,并替换mdf文件。使受损的mdf文件离线。alterdatabasetestdb01setoffline;---替换mdf文件,删除ldf日志文件---离......
  • Linux系统centos7,怎么配置yum,以及Errno 14 curl#37 - “Couldn‘t open file /dvd/App
    情况:我手上是一个删掉Windows系统,依靠centos7重装了Linux系统的电脑,里面是空的,什么都没有。加上在今年6月份,上游已经放弃centos7的维护,之前的一些源和网站都没用,那些教程也就没用了。步骤:1.进入root账号,这样才有足够权限做后面的事 2.检查网络是否可以连接外网。拿阿......
  • JAVA开发中 MyBatis XML 映射文件 的作用
    MyBatisXML映射文件(通常是以.xml结尾的文件,例如UserMapper.xml)是MyBatis框架的重要组成部分,主要用于定义SQL语句、结果映射关系以及参数绑定。它的作用是将Java方法与SQL语句关联起来,实现持久化操作(如查询、插入、更新和删除)。以下是关于MyBatisXML映射文......
  • JSON结构快捷转XML结构API集成指南
    JSON结构快捷转XML结构API集成指南引言在当今的软件开发世界中,数据交换格式的选择对于系统的互操作性和效率至关重要。JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是两种广泛使用的数据表示格式。JSON因其简洁、易于阅读和解析的特点,在Web应用和移动应......
  • 使用ClosedXML实现Excel导入导出
    使用ClosedXML实现Excel导入导出写在开头游览Dotnet基金会中的项目时,发现了这个库,Github链接,它的性能非常好,详细见下图话不多说,直接上代码吧!导出后端:publicstaticbyte[]Output<T>(List<T>data,stringsheetName){usingvarworkbook=newXLWorkb......
  • 第11章 其他 XML 技术
    第11章其他XML技术概述System.Xml命名空间由以下命名空间和核心类型构成:​System.Xml.*​​XmlReader​和XmlWriter​:高性能、前向读写的XML流​XmlDocument​:基于W3C标准DOM(已过时)的XML文档​System.Xml.Linq​:全新的以LINQ为中心的XMLDOM(请参见第10章L......
  • Maven-pom.xml引入包冲突
    日志包冲突LoggerFactoryisnotaLogbackLoggerContextbutLogbackisontheclasspath.EitherremoveLogbackorthecompetingimplementation(classorg.apache.logging.slf4j.Log4jLoggerFactoryloadedfromfile:/Users/yuqiu/.m2/repository/org/apache/logging/l......