zoukankan      html  css  js  c++  java
  • 利用XML FOR PATH 合并分组信息


          最近做统计功能的时候经常需要用到合并分组内容,如果只根据分组统计数值用聚合函数就可以了,如果处理分组后的字符串列呢,我们就必须要自己写函数处理了,比如有这样的数据信息:
          
                

          现在要对上面数据进行分组,获取统计结果:

                


          实现方式一:
                      
    Code

          实现方式二:利用 T-SQL 技术生成 XML 的方法
          
    select DepartmentName,stuff((select ','+EmpoyeeName from Employees where DepartmentName = e.DepartmentName for xml path('')),1,1,''as EmployeesList from Employees E
    group by DepartmentName

          呵呵,这样就是不是简单多了,不用再写一个函数去处理这么麻烦了。     


          扩展:For XML Path
          1.在该 XML 中,生成的行集中的每个列值都包在元素中。由于 SELECT 子句未指定任何列名别名,因此生成的子元素名称与 SELECT 子句中相应的列名相同。如果未对path指定任何信息,针对行集中的每一行,将添加一个 <row> 标记。
          
          SQL语句:

    select DepartmentName,(select ''+EmpoyeeName from Employees where DepartmentName = e.DepartmentName for xml path) as EmployeesList from Employees E
    group by DepartmentName

          如:
                 

          2.您可以选择指定行元素名称,以覆盖默认的 <row>。例如,以下查询将针对行集中的每一行返回相应的 <Employee> 元素。
          
          SQL语句:

    select DepartmentName,(select ''+EmpoyeeName from Employees where DepartmentName = e.DepartmentName for xml path('Employee')) as EmployeesList from Employees E
    group by DepartmentName

          结果:
          
                

          3.如果指定零长度字符串,则将不生成包装元素。
          结果:
          
                 

          4.可以通过在 FOR XML 中指定 root 选项来添加单个顶级元素
          SQL语句:
          
    select DepartmentName,(select ''+EmpoyeeName from Employees where DepartmentName = e.DepartmentName for xml path('Employee'),root('Root')) as EmployeesList from Employees E
    group by DepartmentName

          结果:

          
          
  • 相关阅读:
    Java基础学习:JUC篇
    老掉牙的技术——远线程运行API
    本来要开始搬家~!~可CSDN又打不开,可能是我RP不好……贴一个这几天学会的老掉牙的技术——远线程运行汇编代码
    【VB.NET】也谈跨进程消息钩子
    【VB.NET】打造一个象棋魔法学校的老师——谨以此文献给象棋爱好者——如何实现与引擎的通讯
    【VB.NET】打造一个象棋魔法学校的老师——谨以此文献给象棋爱好者——协议包装和棋子识别
    【VB.NET】打造一个象棋魔法学校的老师——谨以此文献给象棋爱好者——编写界面和功能的最终实现
    【VB.NET】提取PPT中的SWF
    班门弄斧一次~~VC++.NET 2008写的HOOK RECV代码
    关于单内核与多内核
  • 原文地址:https://www.cnblogs.com/Komici/p/1541453.html
Copyright © 2011-2022 走看看