我正在生成示例表并使用 cte 从中生成 xml
declare @t table (ID int, PersonID int, Type varchar(10), Name varchar(10),
Category varchar(10), value int)
insert @t values
(1, 1234, 'xtype', 'John', 'abc', 200),
(2, 1234, 'ytype', 'John', 'xyz', 230),
(3, 1234, 'ztype', 'John', 'ccc', 220),
(4, 2222, 'xtype', 'Jim', 'abc', 200),
(5, 3333, 'xtype', 'Tim', 'abc', 500)
; with cte
as (
select distinct PersonID from @t
)
select
(select
PersonID,
(select
Type,
Name,
category,
value
from
@t t
where
t.PersonID = cteInner.PersonID
for xml path('SpecifiedType'), type )
from
cte cteInner
where
cteInner.PersonID = cteOuter.PersonID
for xml path(''), type, root('data') ) as xmldetail
from
cte cteOuter
现在我想将以下数据插入到另一个表中,包括我创建的其他数据列的 xml
Example Table
PersonID Name xmldetail
1234 John (GeneratedXmlFrom using cte)
2222 Jim (GeneratedXmlFrom using cte)
3333 Tim (GeneratedXmlFrom using cte)
最佳答案
declare @t table (ID int, PersonID int, Type varchar(10), Name varchar(10),
Category varchar(10), value int)
insert @t values
(1, 1234, 'xtype', 'John', 'abc', 200),
(2, 1234, 'ytype', 'John', 'xyz', 230),
(3, 1234, 'ztype', 'John', 'ccc', 220),
(4, 2222, 'xtype', 'Jim', 'abc', 200),
(5, 3333, 'xtype', 'Tim', 'abc', 500)
;WITH cte
AS (
SELECT DISTINCT PersonID
,NAME
FROM @t
)
insert into TABLENAME
SELECT PersonID
,NAME
,(
SELECT PersonID
,(
SELECT Type
,NAME
,category
,value
FROM @t t
WHERE t.PersonID = cteInner.PersonID
FOR XML PATH('SpecifiedType')
,TYPE
)
FROM cte cteInner
WHERE cteInner.PersonID = cteOuter.PersonID
FOR XML PATH('')
,TYPE
,ROOT('data')
) AS xmldetail
FROM cte cteOuter
您必须在选择列表中添加名称和 ID
SELECT PersonID、姓名
还必须在 CTE 选择语句中包含 Name
对/对
1234 John <data><PersonID>1234</PersonID><SpecifiedType><Type>xtype</Type><Name>John</Name><category>abc</category><value>200</value></SpecifiedType><SpecifiedType><Type>ytype</Type><Name>John</Name><category>xyz</category><value>230</value></SpecifiedType><SpecifiedType><Type>ztype</Type><Name>John</Name><category>ccc</category><value>220</value></SpecifiedType></data>
2222 Jim <data><PersonID>2222</PersonID><SpecifiedType><Type>xtype</Type><Name>Jim</Name><category>abc</category><value>200</value></SpecifiedType></data>
3333 Tim <data><PersonID>3333</PersonID><SpecifiedType><Type>xtype</Type><Name>Tim</Name><category>abc</category><value>500</value></SpecifiedType></data>
要将值插入另一个表,请使用 insert into TABLENAME
关于sql - 如何使用 CTE 将一组行和 xml 生成的列插入到单个查询中的表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29921553/