語句SELECT * FROM MEMBER查詢出來結果如上圖所示,現加入FOR XML PATH看下會有什麼變化,語句如下:
SELECT * FROM MEMBER FOR XML PATH
點擊進入可查詢詳細情況
由此可見,FOR XML PATH 是可以將查詢結果以XML格式輸出。
那麼,我們可以自定義節點嗎?先試試
SELECT * FROM MEMBER FOR XML PATH ('m')
結果顯示行節點變成了<m>,既然可以修改,那當然path()內的值可以修改成其他值。
如果是這樣path('')則表示去掉行節點。
那列節點呢?回顧下SELECT *或 SELECT 列名 ,那也就是說可以從這裏改變它
SELECT 編號 BH , 姓名 XM, 性別 sex,年齡 age ,愛好 AH FROM MEMBER FOR XML PATH ('m')
但上面這樣輸出的形式還不是我們想要看到的,怎麼能把一些符號可以去掉呢?
讓我們自定義輸出,語句如下:
SELECT '[' 愛好 ']' FROM MEMBER FOR XML PATH('')
輸出結果:
因爲path('')值爲空,所以結果只會顯示一行一個值記錄
如果是int數據類型,如年齡,需要轉換成字符串
SELECT '[' cast(年齡 as nvarchar) ']', '[' 愛好 ']' FROM MEMBER FOR XML PATH ('')
FOR XML PATH基本使用就介紹到這裏,下面看下如何運用
二、結合GROUP BY 實際應用,要求按下圖方式顯示
分析下看如何運用,除了與GROUP BY 結合使用外還用到STUFF函數,當然也可以用LEFT等函數,我這裏只簡單介紹STUFF函數的使用
STUFF函數作用:刪除指定長度的字符,或在指定的起點處插入另一組字符。
STUFF ( character_expression , start , length , replaceWith_expression )
select a.編號,a.姓名,愛好=(select ',' 愛好 from member where 編號=a.編號 for xml path('')) from member a group by a.編號,a.姓名
現在要想辦法去掉“愛好”列的第一個逗號,此時用到STUFF函數
select a.編號,a.姓名,愛好=STUFF((select ',' 愛好 from member where 編號=a.編號 for xml path('')),1,1,'') from member a GROUP BY a.編號,a.姓名