• SQL 将一列多行数据合并为一行 FOR XML PATH


    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的知识。)

     

    原文地址:

  • 相关阅读:
    参数方法HttpServletRequest之getParameter
    nullnull单例的实现方式之GCD方法
    阻带窗函数[数字信号处理]使用窗函数设计FIR滤波器
    nullnullhdu4450Draw Something
    第三方设置XML解析:第三方库GDataXMLNode的使用
    class左边nbu 2414 Please help the poor donkey!
    数据可视化可视化营养含量
    速度坐标hdu4445Crazy Tank
    singletonclassDesign Patterns: Singleton Basics 设计模式:单例基础
    控制台权限MMC不能打开文件 SQL Server Enterprise Manager.MSC 或权限不够 (解决方法 )
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/3612328.html
Copyright © 2020-2023  润新知