SQL XML создание с использованием запроса - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь сгенерировать XML код файла, используя SQL из базы данных, в которой есть два столбца с повторяющимся значением и один столбец с разными значениями. Я использовал код, подобный этому

DECLARE @ Select XML bit = 1 SELECT @XMLResult = convert (varchar (max), (SELECT отличный max (Num1) 'Num1', max (Num2) 'Num2', (случай, когда Side = '1', затем 'L', иначе 'R' end) 'Num3 / Side', (случай, когда Side = '1', затем 'L', иначе 'R' end) ' Num3 / Side 'From (выберите Num1, Num2, Num3 Table1) Группировка по Side

FOR XML PATH (' '), TYPE, ROOT (' rootnode '))))

IF @ Select XML = 1 BEGIN SELECT convert (xml,@XMLResult) END Print @ XMLResult

, который дает такой результат

<?xml version="1.0"?>

-<rootnode>

<Num1>200</Num1>

<Num2>260.8000</Num2>


-<Num3>

<Side>LL</Side>

</Num3>

<Num1>200</Num1>

<Num2>260.8000</Num2>


-<Num3>

<Side>RR</Side>

</Num3>

</rootnode>

Я хочу, чтобы в последнем Num3 был только один столбец и с двумя строками, такими как

<?xml version="1.0"?>

-<rootnode>

<Num1>200</Num1>

<Num2>260.8000</Num2>


-<Num3>

<Side>L</Side>

<Side>R</Side>

</Num3>

</rootnode>

, можно ли добавить две строки в одном столбце в XML с помощью запроса SQL

1 Ответ

1 голос
/ 21 января 2020

Вам нужно иметь еще for xml subquery для вашего Num3.

DECLARE @XMLResult varchar(max)
DECLARE @SelectXML bit = 1 
SELECT @XMLResult = convert(varchar(max)
    ,( SELECT max(Num1) 'Num1' 
    , max(Num2) 'Num2' 
    , (select 
         max(case when t.Side='1' then 'L' else 'R' end) 'Side'
         From Table1 t
         Where t.Num1 = max(A.Num1) or t.Num2 = max(A.Num2)
         Group by t.Num1, t.Num2
        FOR XML PATH(''), TYPE) 'Num3'
    From Table1 A 

FOR XML PATH(''),TYPE, ROOT('rootnode') ))

IF @SelectXML = 1 BEGIN SELECT convert(xml,@XMLResult) END Print @XMLResult
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...