博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL 将一列多行数据合并为一行 FOR XML PATH
阅读量:6891 次
发布时间:2019-06-27

本文共 1241 字,大约阅读时间需要 4 分钟。

  hot3.png

FOR XML PATH 方法是用于将查询结果集以XML形式展示,这样展示方式的好处不言而喻。现在我要介绍的FOR XML PATH的“另类”用法。

首先,我们先来看看它的正常用法。下图是我们用到的一张TEST_PERSON表:

用FOR XML PATH方法查询,SQL语句如下:

SELECT * FROM TEST_PERSON FOR XML PATH

显示结果如下:

展开结果可以看到如下图:

神奇吧!!!!细心的同学会注意到这个XML文件的行节点是<row>,如果需求需要改变这个行节点为<animal>,怎么改?看下面的SQL语句你就会知道了。

SELECT * FROM TEST_PERSON FOR XML PATH('animal')

展开结果如下图:

简单吧!!!有野心的同学就会说了:既然行节点可以改变,那列节点要改变又该怎么操作呢?很简单,只要给字段加别名。SQL语句如下:

SELECT ID AS XuHao,NAME AS MyName FROM TEST_PERSON FOR XML PATH('animal')

展开结果如下:

好玩吧!!!古怪的同学就想了:既然行和列都可以自定义,那么是否说我们可以定义我们喜欢的输出方式呢?!(我们要说的重点就是这)

看如下SQL语句:

SELECT '['+NAME+']' +'    'FROM TEST_PERSON FOR XML PATH('')

展示结果如下:

说了这么多,好像只是为了好玩。那么有哪些实际的应用场景中可以用到这个技术呢?

例如:要查询一个订单信息,这些信息包括(订单号+费用名称+...),而费用我们是存在单独的一个子表中,且一个订单不只一笔费用。

接下来我们增加个动物的行为表TEST_HOBBY表,用演示以上效果。TEST_HOBBY表如下:

我们查动物信息(动物名字+动物行为),动物行为存在TEST_HOBBY表中,我们通过ID 关联,并且一个动物存在多种行为。SQL语句如下:

SELECT  PE.NAME,--取出TEST_PERSON表中的NAME字段 --通过ID关联到TEST_HOBBY表,并把这表中各种动物的行为拼接为一个字段返回 (SELECT ' '+HO.HOBBY_NAME+' ' FROM TEST_HOBBY HO WHERE HO.PARENT_ID=PE.ID FOR XML PATH('')) AS HOBBY  FROM TEST_PERSON PE

结果展示如下:

好玩吧,O(∩_∩)O哈哈~

更多知识可以参考: http://msdn.microsoft.com/zh-cn/library/ms189885.aspx

(今天写存储过程时用到了FOR XML PATH方法,所以整理一下FOR XML PATH的知识。)

 

原文地址:

转载于:https://my.oschina.net/wzzz/blog/209790

你可能感兴趣的文章
python 高级函数
查看>>
F.Cards with Numbers
查看>>
简单入门Buffer
查看>>
OO第四阶段总结
查看>>
javascript总结02
查看>>
创建windows服务
查看>>
用main函数传参做简单的计算器的代码
查看>>
python中struct.unpack的用法
查看>>
体绘制(Volume Rendering)概述之4:光线投射算法(Ray Casting)实现流程和代码(基于CPU的实现)...
查看>>
Python实践之(七)逻辑回归(Logistic Regression)
查看>>
PAT (Advanced Level) 1107. Social Clusters (30)
查看>>
【开源社群系统研发日记五】ThinkSNS+ 是如何计算字符显示长度的
查看>>
Nodejs日志管理log4js
查看>>
python获取昨日日期
查看>>
海康威视 - 萤石云开放平台 js 版
查看>>
关于分销平台
查看>>
jquery实用的一些方法
查看>>
质数方阵
查看>>
jQuery $.each用法
查看>>
C语言结构体指针成员强制类型转换
查看>>