sql for xml path用法

SQL SERVER用STUFF和FOR XML PATH合并行 原始数据如下 首先通过FOR XML PATH获取XML 元素字符串 以XML格式输出查找结果 SELECT ',' + new_name FROM new_test1Base FOR XML PATH ('') 输出:,123,123,445,445,asdf SELECT ',' + new_name as m2 FROM new_test1Base ... 阅读详情
  一.FOR XML PATH 简单介绍

 

             那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:

 

       接下来我们来看应用FOR XML PATH的查询结果语句如下:

 

SELECT * FROM @hobby FOR XML PATH

 

       结果:

 

复制代码
复制代码
<row>
  
<hobbyID>1</hobbyID>
  
<hName>爬山</hName>
</row>
<row>
  
<hobbyID>2</hobbyID>
  
<hName>游泳</hName>
</row>
<row>
  
<hobbyID>3</hobbyID>
  
<hName>美食</hName>
</row>
复制代码
复制代码

 

      由此可见FOR XML PATH 可以将查询结果根据行输出成XML各式!

 

      那么,如何改变XML行节点的名称呢?代码如下:      

 

SELECT * FROM @hobby FOR XML PATH('MyHobby')

 

 

 

      结果一定也可想而知了吧?没错原来的行节点<row> 变成了我们在PATH后面括号()中,自定义的名称<MyHobby>,结果如下:

 

复制代码
复制代码
<MyHobby>
  
<hobbyID>1</hobbyID>
  
<hName>爬山</hName>
</MyHobby>
<MyHobby>
  
<hobbyID>2</hobbyID>
  
<hName>游泳</hName>
</MyHobby>
<MyHobby>
  
<hobbyID>3</hobbyID>
  
<hName>美食</hName>
</MyHobby>
复制代码
复制代码

 

      这个时候细心的朋友一定又会问那么列节点如何改变呢?还记的给列起别名的关键字AS吗?对了就是用它!代码如下:

 

SELECT hobbyID as 'MyCode',hName as 'MyName' FROM @hobby FOR XML PATH('MyHobby')

 

 

      那么这个时候我们列的节点名称也会编程我们自定义的名称 <MyCode>与<MyName>结果如下:

复制代码
复制代码
<MyHobby>
  
<MyCode>1</MyCode>
  
<MyName>爬山</MyName>
</MyHobby>
<MyHobby>
  
<MyCode>2</MyCode>
  
<MyName>游泳</MyName>
</MyHobby>
<MyHobby>
  
<MyCode>3</MyCode>
  
<MyName>美食</MyName>
</MyHobby>
复制代码
复制代码

    噢! 既然行的节点与列的节点我们都可以自定义,我们是否可以构建我们喜欢的输出方式呢?还是看代码: 

SELECT '[ '+hName+' ]' FROM @hobby FOR XML PATH('')

 

    没错我们还可以通过符号+号,来对字符串类型字段的输出格式进行定义。结果如下:

 

[ 爬山 ][ 游泳 ][ 美食 ]

 

    那么其他类型的列怎么自定义? 没关系,我们将它们转换成字符串类型就行啦!例如:

 

SELECT '{'+STR(hobbyID)+'}','[ '+hName+' ]' FROM @hobby FOR XML PATH('')

 

    好的 FOR XML PATH就基本介绍到这里吧,更多关于FOR XML的知识请查阅帮助文档!

 

    接下来我们来看一个FOR XML PATH的应用场景吧!那么开始吧。。。。。。

 

        二.一个应用场景与FOR XML PATH应用

 

        首先呢!我们在增加一张学生表,列分别为(stuID,sName,hobby),stuID代表学生编号,sName代表学生姓名,hobby列存学生的爱好!那么现在表结构如下:

 

           

 

        这时,我们的要求是查询学生表,显示所有学生的爱好的结果集,代码如下:

 

复制代码
复制代码
SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby FROM (
SELECT sName,
(
SELECT hobby+',' FROM student 
  
WHERE sName=A.sName 
  
FOR XML PATH('')) AS StuList
FROM student A 
GROUP BY sName
) B 
复制代码
复制代码

 

         结果如下:

 

 分析:好的,那么我们来分析一下,首先看这句:

 

SELECT hobby+',' FROM student 
  
WHERE sName=A.sName 
  
FOR XML PATH('')

 

这句是通过FOR XML PATH 将某一姓名如张三的爱好,显示成格式为:“ 爱好1,爱好2,爱好3,”的格式!

 

那么接着看:

 

复制代码
复制代码
SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby FROM (
SELECT sName,
(
SELECT hobby+',' FROM student 
  
WHERE sName=A.sName 
  
FOR XML PATH('')) AS StuList
FROM student A 
GROUP BY sName
) B  
复制代码
复制代码

 

剩下的代码首先是将表分组,在执行FOR XML PATH 格式化,这时当还没有执行最外层的SELECT时查询出的结构为:

 

 

可以看到StuList列里面的数据都会多出一个逗号,这时随外层的语句:SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby 就是来去掉逗号,并赋予有意义的列明!

 

====================

    SELECT B.CustomerID,LEFT(GoodsNameStr,LEN(GoodsNameStr)-1) as GoodsNameStr FROM (
    SELECT CustomerID,
    (
    SELECT GoodsName+'$' FROM N_CustomerBuyCardInfo 
      WHERE CustomerID=A.CustomerID 
      FOR XML PATH('')
    ) AS GoodsNameStr
    FROM N_CustomerBuyCardInfo A 
    GROUP BY CustomerID
       ) B
SQL SERVER FOR XML PATH 实现多行合并一个字段 一.FOR XML PATH 简单介绍 那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果语句如下: SELECT * FROM @hobby FOR XML PATH 结果: <row> <hobbyID>1</ho... 阅读详情

相关推荐

stm32 Can通讯过滤器寄存器设置(实验验证)

起因:在使用stm32单片机can通讯时,参考手册的介绍与寄存器封装有差别,不好理解怎么去设置寄存器。在参考一些代码时,对怎么去设置过滤器还是难以理解。 解决: 在寄存器封装库中,我们发现CAN过滤器设置寄存器封装有CAN1->sFilterRegister[ x ].FR1 和 CAN1->sFilterRegister[ x ].FR2 两个寄存器,其封装如下:type

u013984214的专栏 3288

SQL Server : FOR XML PATH 函数用法以及转义字符正常显示

For XML,就是将查询结果作为XML来检索。XML有4中模式,官方文档上有这4种模式的使用方法。模式描述RAWSELECT 语句返回的行集中为每个行生成一 元素AUTO将基于指定 SELECT 语句的方式来使用试探性方法在 XML 结果中生成嵌套。(说的是什么?是能够生成嵌套的XML吗?EXPICIT模式允许对 XML 的形状进行更多控制。PATH任务比较简单的方式。仅当执行设置了这些模式的查询时,这些模式才有效。它们不会影响以后执行的任何查询的结果。

枫的专栏 1万+

手把手教你用ADS仿真FMMT417雪崩三极管,搞定射频脉冲源设计

本文详细介绍了如何使用ADS仿真工具设计基于FMMT417雪崩三极管的射频脉冲源。从器件选型、SPICE模型导入到电路设计与优化,提供了一套完整的实操方案,特别适合射频脉冲设计的初学者。通过级联设计和实测验证,帮助工程师快速掌握雪崩电路的应用技巧,提升射频脉冲源的设计效率。

weixin_30905981的博客 487

SQL中的for xml path

点击关注“SQL数据库开发”,设为“置顶或星标”,第一时间送达干货最近出的每日一题里面,有一道是关于合并同类型数据为一行的题,使用SQL Server 2017版本及以上的直接使用STRING_AGG()函数即可,但是2016版本以下是没有这个功能的,那该如何求解?今天就给大家介绍一下FOR XML PATH,它就是用来处理低版本数据库中数据合并的,是一个比较古老的功能了...

SQL数据库开发 3195

【大模型微调】魔搭社区GPU进行LLaMA-Factory微调大模型自我认知

本教程介绍如何使用魔搭社区GPU资源和LLaMA-Factory工具进行大模型微调。主要内容包括环境配置、工具安装、模型训练和效果评估。通过LoRA算法进行自我认知微调,详细说明了从数据准备到模型导出的完整流程,并提供了参数调优和显存管理等实用技巧,帮助读者快速掌握大模型定制化训练方法。

LChuck的博客 2924

PyTorch版Unet训练后别只看loss:手把手教你计算并可视化多类别语义分割的mIoU(附完整代码)

本文详细介绍了在PyTorch中使用Unet模型进行多类别语义分割后,如何计算和可视化mIoU(mean Intersection over Union)以全面评估模型性能。通过完整的代码示例和实用技巧,帮助开发者从loss优化转向更精准的区域分割评估,特别适用于医学图像分析等关键场景。

weixin_30906185的博客 435

Sql Server 的FOR XML PATH(‘‘)函数用法

转自:https://www.cnblogs.com/TulipsWill/p/11498859.html 1. 如下表: 2. 转换xml 1 select name from zz FOR XML PATH('root'); 1 ps: FOR XML PATH('root')中root是xml根节点。<br><br><br><br> 3. 加个分隔符和去掉.

chpllp的博客 2万+

人工智能在高中教育中的应用现状剖析与挑战应对

人工智能在高中教育中的应用现状剖析与挑战应对

燕鹏 1338

SQL 中的 For Xml Path解析

STUFF()函数中如果开始位置或长度值是负数,或者如果开始位置大于第一个字符串的长度,将返回空字符串。如果要删除的长度大于第一个字符串的长度,将删除到第一个字符串中的第一个字符。最近出的每日一题里面,有一道是关于合并同类型数据为一行的题,使用SQL Server 2017版本及以上的直接使用STRING_AGG()函数即可,但是2016版本以下是没有这个功能的,那该如何求解?如果要删除的长度大于第一个字符串的长度,将删除到第一个字符串中的第一个字符。上面的WHERE条件是必须要的,如果去掉会怎么样呢?

Free雅轩的博客 1080

贝叶斯网络 (Bayesian Networks) 原理与代码实例讲解

贝叶斯网络 (Bayesian Networks) 原理与代码实例讲解 1. 背景介绍 1.1 什么是贝叶斯网络? 贝叶斯网络(Bayesian Networks)是一种基于概率论的图形模型,用于表示随机

AI天才研究院 1329

EtherCAT主站SOEM -- 19 --Qt-Soem通过CSP模式(周期同步位置模式)控制一个电机转圈圈

以上就是EtherCAT主站SOEM – 19 --Qt-Soem通过CSP模式(周期同步位置模式)控制一个电机转圈圈的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 1995

SQL 中的For Xml Path详解

如果要删除的长度大于第一个字符串的长度,将删除到第一个字符串中的第一个字符。今天就给大家介绍一下FOR XML PATH,它就是用来处理低版本数据库中数据合并的,是一个比较古老的功能了,新版本中也依然还能使用,对SQL 中的For Xml Path相关知识感兴趣的朋友一起看看吧。最近出的每日一题里面,有一道是关于合并同类型数据为一行的题,使用SQL Server 2017版本及以上的直接使用STRING_AGG()函数即可,但是2016版本以下是没有这个功能的,那该如何求解?是不是比LEFT简短一些啦?

weixin_40029679的博客 2040

科技与伦理的平衡点:人类计算的伦理

科技与伦理的平衡点:人类计算的伦理 关键词 科技与伦理 人类计算 隐私问题 道德决策自动化 公平性与偏见 法律与社会责任 摘要 本

AI天才研究院 1162

SQL SERVER中XML查询:FOR XML指定PATH

在SQL SERVER中,XML查询可以指定RAW,AUTO,EXPLICIT,PATH。本文用一些实例介绍SQL SERVER中指定PATH的XML查询。

LeeWhoee University 4363

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

mysql中for xml path,SQL中如何使用FOR XML PATH合并行数据?

SQL专栏SQL数据库基础知识汇总SQL数据库高级知识汇总FOR XML PATH是什么FOR XML PATH 是将查询结果集以XML形式展现,将多行的结果,展示在同一行。我们用实例来给大家介绍它的神奇之处。创建测试数据我们创建一个统计学生爱好的表CREATE TABLE Stu_Hobby(Stu_Name NVARCHAR(20),--姓名Age INT,--年龄Hobby NVARCHAR...

weixin_42133415的博客 2867

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

for xml path mysql_SQL Server 中FOR XML PATH的应用

准备好的表及数据(Customer表)1、FOR XML PATH应用SELECT*FROMdbo.CustomerFORXMLPATH('Customer')结果:将查询到表中所有行以及字段拼接成一个xml结构的数据,每行是一个节点(row),字段是xml节点下的元素2、FOR XML PATH应用无节点输出SELECT*FROMdbo.CustomerFORXMLPA...

weixin_32465003的博客 604

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

SQL Server FOR XML PATH 语句的应用

在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用示例。view sourceprint?1DECLARE@TempTable table(UserID int, UserName nvarchar(50)); 2insertinto@TempTable (UserID,UserName) values(1,'a') 3insertinto@TempTable (UserID,UserName) values(2,'b') 4   5selectU

sgear 871

SQL SERVER FOR XML PATH 用法

      有时候我们需要把多行数据,合并成一行显示,并用逗号或者其他方式分隔显示,这时候我们可以使用FOR XML PATH的方式,来实现需求。测试数据如下:--测试数据 if not object_id(N'Tempdb..#T') is null drop table #T Go Create table #T([Province] nvarchar(22),[City] nvarchar...

二月十六的博客 1万+

灵活运用 SQL SERVER FOR XML PATH

灵活运用 SQL SERVER FOR XML PATH         FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主.         一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XM...

tlammon的专栏 4832

灵活运用 SQL SERVER FOR XML PATH

FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主. 一.FOR XML PATH 简单介绍 那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存...

weixin_34379433的博客 2346

mysql xml path_使用 SQL的 for xml path来进行字符串拼接

本篇主要讲怎么利用SQL的FOR XML PATH 参数来进行字符串拼接,FOR XML PATH的用法很简单,它会以xml文件的形式来返回数据。我的讲解步骤:1:构造初始数据2:提出问题3:简单介绍FOR XML PATH4:解答问题1.构造初始数据举出一个经典的学生课程例子,共有学生、课程与学生课程三张表。表1:Studentstudent_idstudent_name1张三2李四3王五表2:...

weixin_39679468的博客 648

sql for xml path用法 (转载)

一.FOR XML PATH 简单介绍                那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:          接下来我们来看应用FOR XML PATH的查询结果语句如下:   SELECT * FROM @hobby FOR XML PATH          结果:

龙井茶的Sky 2172

SQL Server 合并列 for xml path

背景笔者实习两周了,第一个任务基本完成,现在开始做第二个任务:还是报表,要求合并同一列的字段显示到同一个格子主要知识SQL Server 的 for xml path 和 stuff实验所用表表名:tb20170709目标格式实验过程1. select * from tb20170709 for xml path字段点开显示为: 2. select subject from tb20170709

wf824284257的博客 977

sql server //for xml path

灵活运用 SQL SERVER FOR XML PATH         FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主.         一.FOR XML PATH 简单介绍              那

fengzijinliang的专栏 525
上一篇: 免费GIM企业即时通讯系统(服务器/客户端)
下一篇: varchar和Nvarchar区别
Matrix0078
博客等级 码龄23年 126粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值