group by後把沒有group的字段拼接成一行,FOR XML PATH('')的使用

FOR XML PATH(''):將查詢結果集以XML形式展現。
1、select top 1 opr_id,user_id from dbo.tracking_log FOR XML PATH('oprs')
返回結果xml:

<oprs>
<opr_id>100</opr_id>
<user_id>Natalie813</user_id>
</oprs>
字段名就是xml的節點名,可以 AS 別名。PATH括號中的是根節點名。
2、select '['+opr_id+']' from dbo.tracking_log where user_id = 'Natalie813' FOR XML PATH('')
返回結果:[100][2][4][56]
3、select distinct t1.user_id,
(select t2.opr_id+',' from dbo.tracking_log as t2 where t2.user_id = t1.user_id FOR XML PATH('')) as opr
from dbo.tracking_log as t1
-- where t1.user_id = 'Natalie813'
group by t1.user_id
結果:
列名:user_id         opr
           Natalie813   100,2,4,56,
4、優化步驟3的sql,去掉最後一個逗號

select user_id,LEFT(opr,LEN(opr)-1) from
(
select distinct t1.user_id,
(select t2.opr_id+',' from dbo.tracking_log as t2 where t2.user_id = t1.user_id FOR XML PATH('')) as opr
from dbo.tracking_log as t1
where t1.user_id = 'Natalie813'
group by t1.user_id
) a

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章