Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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><B_MainID>1</B_MainID><B_ID>1</B_ID><B_Value>Value 1</B_Value><B_SomeData>20</B_SomeData><B_MainID>1</B_MainID><B_ID>2</B_ID><B_Value>Value 2</B_Value><B_SomeData>30</B_SomeData><B_MainID>1</B_MainID><B_ID>3</B_ID><B_Value>Value 3</B_Value><B_SomeData>40</B_SomeData><B_MainID>1</B_MainID><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_MainID>2</B_MainID><B_ID>5</B_ID><B_Value>Value 5</B_Value><B_SomeData>60</B_SomeData><B_MainID>2</B_MainID><B_ID>6</B_ID><B_Value>Value 6</B_Value><B_SomeData>70</B_SomeData></Data_From_B> </Data> Помогите преобразовать мой запрос для получения нужного вида xml. Буду благодарен за любую помощь! |
28 апр 15, 13:40 [17575298] Ответить | Цитировать Сообщить модератору |
Кролик-зануда
Guest |
Slavalp93, ... for xml path(''),type) as "Data_From_B" .. |
28 апр 15, 13:47 [17575352] Ответить | Цитировать Сообщить модератору |
WarAnt Member Откуда: Питер Сообщений: 2423 |
Slavalp93, type перенесите в подзапрос. |
28 апр 15, 13:49 [17575366] Ответить | Цитировать Сообщить модератору |
Slavalp93 Member Откуда: Сообщений: 10 |
То что нужно! Спасибо за помощь! |
28 апр 15, 14:15 [17575571] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |