提问人:user3552829 提问时间:2/9/2017 更新时间:2/9/2017 访问量:135
XML 显式的重复值
Duplicate values FOR XML EXPLICIT
问:
我正在尝试使用 FOR XML EXPLICIT 从 SQL 创建 XML 输出。它必须是 XML EXPLICIT,因为我使用的是不同的数据库,但是,此示例使用的是 SQL Server。
我已经为这个问题声明了一个简单的表@table。它有 2 列(字母、数字)和 3 行。表定义:
declare @table table (letter varchar(1), number int);
insert into @table values ('A',1),('A',2),('A',3)
我的查询是这样的:
select 1 as tag, null as parent,
letter as [letter!1!value],
null as [number!2]
from @table
union all
select 2 as tag, 1 as parent,
letter,number
from @table
for xml explicit
这样做的输出是下面,据我所知,这是因为“字母”列中的值是相同的:
<letter value="A" />
<letter value="A" />
<letter value="A">
<number>1</number>
<number>2</number>
<number>3</number>
</letter>
但是,我需要的输出是这样的:
<letter value="A">
<number>1</number>
</letter>
<letter value="A">
<number>2</number>
</letter>
<letter value="A">
<number>3</number>
</letter>
这是否可行,如果可行,如何实现?
答:
1赞
user3552829
2/9/2017
#1
我想我找到了一个解决方案。只是在表中添加了另一列,以放在 TAG 1(父级)下,但值不同。然后在 ORDER BY 中,我按该列排序,然后按“数字”排序
declare @table table (letter varchar(1), id int, number int);
insert into @table values ('A',1,1),('A',2,2),('A',3,3)
select 1 as tag, null as parent,
letter as [letter!1!value],
id as [letter!1!values!hide],
null as [number!2]
from @table
union all
select 2 as tag, 1 as parent,
letter,id,number
from @table
order by [letter!1!values!hide],[number!2]
for xml explicit
似乎可以解决问题:)
评论
0赞
Shnugo
2/9/2017
很高兴你找到了一个解决方案,从我这边+1,但是(只是因为我很好奇):为什么是必须的?EXPLICIT
评论