首頁 >後端開發 >XML/RSS教程 >利用XML FOR PATH合併分組資訊的範例程式碼(圖文)

利用XML FOR PATH合併分組資訊的範例程式碼(圖文)

黄舟
黄舟原創
2017-03-20 16:35:411771瀏覽


      最近做統計功能的時候常常需要用到合併分組內容,如果只根據分組統計數值用聚合函數就可以了,如果處理分組後的字串列呢,我們就必須要自己寫函數處理了,例如有這樣的資料資訊:
      
          要將上面資料分組,取得統計結果:

      
      

      實現方式一:# :利用T- SQL 技術產生
XML
的方法
      

-- ================================================
-- Description:合并分组内容
-- Author:夏保华
-- Date:2009-08-06
-- ================================================
create   table   Employees(DepartmentName varchar(50),EmpoyeeName  varchar(20))   
insert into Employees   
select '开发部','小刘' union all
select '开发部','小王' union all
select '开发部','小张' union all
select '工程部','老吴' union all
select '工程部','老李' union all
select '市场部','大兵' union all
select '市场部','大黄' union all
select '市场部','大虾' union all
select '市场部','大国'
go 

create function  Sum_ByGroup(@DepartmentName varchar(50))   
returns varchar(8000)   
as   
begin   
    declare @ret varchar(8000)   
    set   @ret  =  ''   
    select  @ret  =  @ret+','+EmpoyeeName from Employees where DepartmentName = @DepartmentName   
    set   @ret   =   stuff(@ret,1,1,'')   
    return   @ret     
end   
go

select DepartmentName,dbo.Sum_ByGroup(DepartmentName) as EmployeesList from Employees
group by DepartmentName
go


##      函數去處理這麼麻煩了。     

      #擴充:For XML Path

      1.在該 XML 中,所產生的行集中的每個欄位值都包在元素中。由於 SELECT 子句未指定任何列名別名,因此產生的子元素名稱與 SELECT 子句中對應的列名相同。如果未對path指定任何訊息,針對行集中的每一行,將會新增一個 41b46b6f645ec95fec97316750881872 標記。
            SQL語句:
<pre class="brush:xml;toolbar:false">select DepartmentName, stuff (( select &amp;#39; , &amp;#39; + EmpoyeeName from Employees where DepartmentName = e.DepartmentName for xml path( &amp;#39;&amp;#39; )), 1 , 1 , &amp;#39;&amp;#39; ) as EmployeesList from Employees E group by DepartmentName</pre>
      如:
   行元素名稱,以覆蓋預設的91be08e08559183ef9a2877d6983a621。例如,以下查詢

將針對行集中的每一行傳回對應的 6ce7af8b0bb7f3399f243967f5878921 元素。       
      SQL語句:
<pre class="brush:sql;toolbar:false">select DepartmentName,( select &amp;#39;&amp;#39; + EmpoyeeName from Employees where DepartmentName = e.DepartmentName for xml path) as EmployeesList from Employees E group by DepartmentName</pre>
      
      3.如果指定零長度字串,則不會產生包裝元素。
      結果:

      

      
          語句:

     

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




      結果:「

      
#   
      
#  

以上是利用XML FOR PATH合併分組資訊的範例程式碼(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn