Дубликаты значений для XML EXPLICIT

Я пытаюсь создать вывод XML из SQL, используя FOR XML EXPLICIT. Это должен быть 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 ответ

Я думаю, что нашел решение. Просто добавили еще один столбец в таблицу, чтобы перейти под 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

Кажется, чтобы сделать трюк:)

Другие вопросы по тегам