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

Откуда:
Сообщений: 11
Есть2 таблицы. Одна содержит поле в XML и надо сделать выборку так, чтобы структура дерева была преобразована в таблицу. Такого типа:
101 user2 2001 77
101 user2 2001 88
101 user2 2001 99
У меня не хватает ума пробраться в структуру дерева. Первое вложение могу получить, а дальше - глухо.

declare @usr table (id int, name varchar(100));
declare @user_info table (user_id int, data xml);

insert into @usr values (100, 'user1'), (101, 'user2'), (102, 'user3');
insert into @user_info values  (101, '
<YEARS>
	<YEAR>2001</YEAR>
	<PAYMENTS>
		<PAY>77</PAY>
		<PAY>88</PAY>
		<PAY>99</PAY>
		<CHECKS>
			<CHECK>23</CHECK>
			<CHECK>56</CHECK>
			<CHECK>78</CHECK>
		</CHECKS>
	</PAYMENTS>
</YEARS>');

SELECT
	u.id,
	u.name,
	y.i.value('.', 'varchar(max)') AS ye 
FROM @usr AS u
JOIN @user_info AS ui ON ui.user_id = u.id
CROSS APPLY ui.data.nodes('YEARS/YEAR') y(i) 
21 авг 15, 15:13    [18051958]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать XML в плоскую таблицу  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
SELECT
	u.id,
	u.name,
	ui.data.value('(YEARS/YEAR)[1]', 'varchar(max)') AS ye ,
	y.i.value('.', 'varchar(max)') AS ye 
FROM @usr AS u
JOIN @user_info AS ui ON ui.user_id = u.id
CROSS APPLY ui.data.nodes('YEARS/PAYMENTS/PAY') y(i) 


так что-ли?
21 авг 15, 15:22    [18052014]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать XML в плоскую таблицу  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
и если честно, меня структура XML смущяет. несколько лет в XML могут быть?
21 авг 15, 15:27    [18052058]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать XML в плоскую таблицу  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1433
AlanDenton,

а что помоему нормалек, храним всю бухгалтерскую информацию в одном xml файле))) универсальная бд таксказать ))
21 авг 15, 16:16    [18052403]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать XML в плоскую таблицу  [new]
sniffysko
Member

Откуда:
Сообщений: 11
AlanDenton
и если честно, меня структура XML смущяет

Структуру я упростил. Она страшная-престрашная.
Реально там 6 таблиц фигурирует. Я просто пытался отделить суть.
Получилось согнать все путем повторного вызова CROSS APPLE и JOIN, углубляясь в структуру документа.

Огромное спасибо за участие!
21 авг 15, 16:21    [18052433]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить