Sql server—— for xml path簡單用法
FOR XML PATH ,其實它就是將查詢結果集以XML形式展現,將多行的結果,展示在同一行。
FOR XML子句有四種最基本的模式:
1、AUTO模式:返回資料表為起表名的元素,每一列的值返回為屬性;
2、RAW模式:返回資料行為元素,每一列的值作為元素的屬性;
3、PATH模式:通過簡單的XPath語法來允許使用者自定義巢狀的XML結構、元素、屬性值
4、EXPLICIT模式:通過SELECT語法定義輸出XML的結構
資料表——
CREATE TABLE [dbo].[tb](
[id] [varchar](3) NULL,
[pid] [varchar](3) NULL,
[name] [varchar](10) NULL
) ON [PRIMARY]
GO
插入資料——
--建立表,插入資料
insert into tb values('001' , null , '廣東省')
insert into tb values('002' , '001' , '廣州市')
insert into tb values('003' , '001' , '深圳市')
insert into tb values('004' , '002' , '天河區')
insert into tb values('005' , '003' , '羅湖區')
insert into tb values('006' , '003' , '福田區')
insert into tb values('007' , '003' , '寶安區')
insert into tb values('008' , '007' , '西鄉鎮')
insert into tb values('009' , '007' , '龍華鎮')
insert into tb values('010' , '007' , '鬆崗鎮')
go
for xml path簡單用法(可以按照分組把相同組的列中的不同的值,像字串一樣拼接在一起顯示在分組之後的列中。)
查詢——
1.把所有地區名稱集中顯示
select ','+name from tb FOR xml path('')
結果如下:
2. 根據pid 相同的欄位分組,同一pid的地區名稱合併一起,並去重顯示
SELECT distinct s.pid, (SELECT ',' + name FROM tb WHERE pid = s.pid FOR xml path ('')) as name FROM tb s
結果如下:(顯示內容第一字元會帶有 ’,‘ 逗號)
3. 通過stuff 函式將第一字元的逗號去掉
SELECT distinct s.pid, (stuff((SELECT ',' + name FROM tb WHERE pid = s.pid FOR xml path ('')),1,1,'')) as name FROM tb s
結果如下:
*如果逗號是顯示在最末尾處,如下:
SELECT pid,(select name+',' from tb where tb.pid=a.pid FOR xml path('') ) AS Sname FROM tb A GROUP BY A.pid
則通過以下處理:
SELECT pid,LEFT(Sname,LEN(Sname)-1) as name FROM (
SELECT pid, (select name+',' from tb where tb.pid=a.pid FOR xml path('') ) AS Sname
FROM tb A
GROUP BY A.pid
) B