Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Select For XML PATH(). Вложенные даные  [new]
Slavalp93
Member

Откуда:
Сообщений: 10
Доброго времени суток!
Прошу помощи в решении вроде как простой задачи. Исходные данные:
create Table A (ID int, Name Varchar(10), SomeData int);
				
create Table B (ID int,	Value Varchar(10), SomeData int, MainID int); -- Link to A
				
Insert into A (ID, Name, SomeData) Values (1, 'Test1', 10)
Insert into A (ID, Name, SomeData) Values (2, 'Test2', 20)

Insert into B(ID, Value, SomeData, MainID) Values (1, 'Value 1', 20, 1)
Insert into B(ID, Value, SomeData, MainID) Values (2, 'Value 2', 30, 1)
Insert into B(ID, Value, SomeData, MainID) Values (3, 'Value 3', 40, 1)
Insert into B(ID, Value, SomeData, MainID) Values (4, 'Value 4', 50, 1)

Insert into B(ID, Value, SomeData, MainID) Values (5, 'Value 5', 60, 2)
Insert into B(ID, Value, SomeData, MainID) Values (6, 'Value 6', 70, 2)

Нужно получить для каждой записи в таблице A перечень значений из таблицы B в виде такого вот XML:
<Data>
  <A_ID>1</A_ID>
  <A_Name>Test1</A_Name>
  <A_SomeData>10</A_SomeData>
  <Data_From_B>
    <B_Main_ID>1</B_Main_ID>
    <B_ID>1</B_ID>
    <B_Value>Value 1</B_Value>
    <B_SomeData>20</B_SomeData>
    <B_Main_ID>1</B_Main_ID>
    <B_ID>2</B_ID>
    <B_Value>Value 2</B_Value>
    <B_SomeData>30</B_SomeData>
    <B_Main_ID>1</B_Main_ID>
    <B_ID>3</B_ID>
    <B_Value>Value 3</B_Value>
    <B_SomeData>40</B_SomeData>
    <B_Main_ID>1</B_Main_ID>
    <B_ID>4</B_ID>
    <B_Value>Value 4</B_Value>
    <B_SomeData>50</B_SomeData>
  </Data_From_B>
</Data>
<Data>
  <A_ID>2</A_ID>
  <A_Name>Test2</A_Name>
  <A_SomeData>20</A_SomeData>
  <Data_From_B>
    <B_Main_ID>2</B_Main_ID>
    <B_ID>5</B_ID>
    <B_Value>Value 5</B_Value>
    <B_SomeData>60</B_SomeData>
    <B_Main_ID>2</B_Main_ID>
    <B_ID>6</B_ID>
    <B_Value>Value 6</B_Value>
    <B_SomeData>70</B_SomeData>    
  </Data_From_B>
</Data>

Делаю вот так:
select	A.ID	as "A_ID",
A.Name		as "A_Name",
A.SomeData	as "A_SomeData",
(select B.MainID	as "B_MainID",
	B.ID		as "B_ID",
	B.Value		as "B_Value",
	B.SomeData	as "B_SomeData"
from B where B.MainID=A.ID
for xml path('')) as "Data_From_B"
from A
for xml path('Data'), type

Но получаю вот такой результат:
<Data>
  <A_ID>1</A_ID>
  <A_Name>Test1</A_Name>
  <A_SomeData>10</A_SomeData>
  <Data_From_B>&lt;B_MainID&gt;1&lt;/B_MainID&gt;&lt;B_ID&gt;1&lt;/B_ID&gt;&lt;B_Value&gt;Value 1&lt;/B_Value&gt;&lt;B_SomeData&gt;20&lt;/B_SomeData&gt;&lt;B_MainID&gt;1&lt;/B_MainID&gt;&lt;B_ID&gt;2&lt;/B_ID&gt;&lt;B_Value&gt;Value 2&lt;/B_Value&gt;&lt;B_SomeData&gt;30&lt;/B_SomeData&gt;&lt;B_MainID&gt;1&lt;/B_MainID&gt;&lt;B_ID&gt;3&lt;/B_ID&gt;&lt;B_Value&gt;Value 3&lt;/B_Value&gt;&lt;B_SomeData&gt;40&lt;/B_SomeData&gt;&lt;B_MainID&gt;1&lt;/B_MainID&gt;&lt;B_ID&gt;4&lt;/B_ID&gt;&lt;B_Value&gt;Value 4&lt;/B_Value&gt;&lt;B_SomeData&gt;50&lt;/B_SomeData&gt;</Data_From_B>
</Data>
<Data>
  <A_ID>2</A_ID>
  <A_Name>Test2</A_Name>
  <A_SomeData>20</A_SomeData>
  <Data_From_B>&lt;B_MainID&gt;2&lt;/B_MainID&gt;&lt;B_ID&gt;5&lt;/B_ID&gt;&lt;B_Value&gt;Value 5&lt;/B_Value&gt;&lt;B_SomeData&gt;60&lt;/B_SomeData&gt;&lt;B_MainID&gt;2&lt;/B_MainID&gt;&lt;B_ID&gt;6&lt;/B_ID&gt;&lt;B_Value&gt;Value 6&lt;/B_Value&gt;&lt;B_SomeData&gt;70&lt;/B_SomeData&gt;</Data_From_B>
</Data>

Помогите преобразовать мой запрос для получения нужного вида xml. Буду благодарен за любую помощь!
28 апр 15, 13:40    [17575298]     Ответить | Цитировать Сообщить модератору
 Re: Select For XML PATH(). Вложенные даные  [new]
Кролик-зануда
Guest
Slavalp93,
...
for xml path(''),type) as "Data_From_B"
..
28 апр 15, 13:47    [17575352]     Ответить | Цитировать Сообщить модератору
 Re: Select For XML PATH(). Вложенные даные  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Slavalp93,

type перенесите в подзапрос.
28 апр 15, 13:49    [17575366]     Ответить | Цитировать Сообщить модератору
 Re: Select For XML PATH(). Вложенные даные  [new]
Slavalp93
Member

Откуда:
Сообщений: 10
То что нужно! Спасибо за помощь!
28 апр 15, 14:15    [17575571]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить