SQL查询 - 将列分组为XML

时间:2018-05-25 09:52:28

标签: sql sql-server

我在MS SQL Server中有一个看起来像这样的表。

SQL Table

我想查询此表,以便TagId和Value列由EntityId组合在一起并显示为XML。

示例查询结果

Sample Result

XML结构不固定。任何类型的XML结构都可以。 有可能吗?

2 个答案:

答案 0 :(得分:1)

您可以使用:

sudo phpenmod mysqli

SQL Fiddle

答案 1 :(得分:0)

这似乎不是一个更好的方法。但它提供了解决方案:

DECLARE @Table TABLE(id int, TagId int, Entityname Varchar(100),EntityId INt, value VARCHAR(50))

INSERT INTO @Table VALUES(1,1,'TravelerProfile',856,'Finanace')
INSERT INTO @Table VALUES(2,2,'TravelerProfile',856,'A')
INSERT INTO @Table VALUES(3,3,'TravelerProfile',856,'pune')

 select
   distinct Entityname, EntityId,
    stuff((
        select ',' + 'OpenTag'+ CAST(u.id AS VARCHAR)+'MidTag'+ u.value+'EndTag'
        from @Table u
        where u.EntityId = EntityId
        order by u.EntityId
        for xml path('')
    ),1,1,'') as Value
INTO #temp
from @Table
group by Entityname,EntityId

SELECT Entityname, EntityId
    ,REPLACE(REPLACE(REPLACE(REPLACE(VALUE,'OpenTag','<Tags><TagId = "'),'MidTag','" value="'),'EndTag','"/></Tags>'),',','') Value
FROM #temp

DROP TABLE #temp

<强>输出:

Entityname      EntityId    Value
TravelerProfile 856         <Tags><TagId = "1" value="Finanace"/></Tags><Tags><TagId = "2" value="A"/></Tags><Tags><TagId = "3" value="pune"/></Tags>