Хотя это работает для получения правильных результатов,
SELECT r.KeyColumn as '@Key', t1.Key1 as 'Key1', t1.Col1 as 'Col1'
FROM @resultset r
INNER JOIN Table1 t1 ON t1.Col1 = 'SomeCondition'
--FOR XML PATH('Column1') -- This errors out when used with union, works as a seperate query.
UNION
SELECT r.KeyColumn as '@Key', t2.Key1 as 'Key2', t2.Col2 as 'Col2'
FROM @resultset r
INNER JOIN Table2 t2 ON t2.Col1 = 'SomeCondition2'
--FOR XML PATH('Column2') -- This errors out when used with union, works as a seperate query.
Результаты:
@Key Key1 Col1
1 1 Table1Col1
1 1 Table2Col
Проблема в том, что результаты вместе не различают разные имена, которые я пытаюсь использовать, из-за UNION. Как я могу получить оба для отображения в одном наборе результатов, но с разными именами? Я думаю, XML сделать это, но не могу понять, как?
Какой оптимальный способ объединить разные запросы с разными результатами / количеством строк и поместить все в один большой XML?
Хорошо, лучшее, что я мог придумать, это:
SELECT r.KeyColumn as '@Key', t1.Key1 as 'Key1', t1.Col1 as 'Col1', '' as 'Key2', '' as 'Col2'
FROM @resultset r
INNER JOIN Table1 t1 ON t1.Col1 = 'SomeCondition'
--FOR XML PATH('Column1') --Error
UNION
SELECT r.KeyColumn as '@Key', '' AS 'Key1', '' as 'Col1', t2.Key1 as 'Key2', t2.Col2 as 'Col2'
FROM @resultset r
INNER JOIN Table2 t2 ON t2.Col1 = 'SomeCondition2'
--FOR XML PATH('Column2') -- Error
даст мне результаты (опять же, как и следовало ожидать из-за Союза)
@Key Key1 Col1 Key2 Col2
---------------------------------------------------------------------------
1 1 Table1Col1
1 1 Table2Col
I still want to get my results as an XML thus:
<Root>
<Column1 Key="1">
<Key1>1</Key1>
<Col1>Table1Col1</Col1>
</Column1>
<Column2 Key="1">
<Key2>1</Key2>
<Col2>Tabl2Col</Col2>
</Column2>
</Root>
или что-то в этих строках:
<Root Key="1">
<Column1>
<Key1>1</Key1>
<Col1>Table1Col1</Col1>
</Column1>
<Column2>
<Key2>1</Key2>
<Col2>Tabl2Col</Col2>
</Column2>
</Root>