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

Откуда: Москва
Сообщений: 163
DECLARE @t TABLE (LogID int, XMLData xml)

INSERT INTO @t (LogID, XMLData)

SELECT 1, '<Product ID="C1" DataMart="1" BatchID="1" />' UNION ALL

SELECT 2, '<Product ID="C2" DataMart="1" BatchID="2" />

<Product ID="C2" DataMart="2" BatchID="5" />' UNION ALL

SELECT 3, '<Product ID="C2" DataMart="1" BatchID="2" />

<Product ID="C1" DataMart="2" BatchID="5" />'

 
DECLARE @d TABLE (ID varchar(256), DataMart int)
insert @d(ID,DataMart) 
select 'C2',2 UNION ALL
select 'C1',2 UNION ALL


SELECT t.LogID,t.XMLData,D.ID,D.DataMart FROM @t t cross join @d d 
where <t.XMLData не содержит ID=d.ID and DataMart=d.DataMart>
 
13 июн 13, 10:40    [14426693]     Ответить | Цитировать Сообщить модератору
 Re: XML не содержащий знания из другой таблицы  [new]
Wisky
Member

Откуда: Москва
Сообщений: 163
SELECT t.*,d.* FROM @t t cross join @d d cross apply  t.XMLData.nodes('/Product') z(z)
where z.value('@ID','varchar(256)')=d.ID and z.value('@DataMart','int')=d.DataMart 


мне нужно инвертировать значения @d
13 июн 13, 10:59    [14426814]     Ответить | Цитировать Сообщить модератору
 Re: XML не содержащий знания из другой таблицы  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Wisky,

select t.*, d.*, dm.c.query('.')
from @t t
	cross join @d d
	cross apply t.XMLData.nodes('/Product[@DataMart=sql:column("d.DataMart")]') dm(c)
where d.ID != dm.c.value('./@ID', 'varchar(256)');
Только лучше б вы по-русски писали, что именно вам нужно...
13 июн 13, 11:12    [14426918]     Ответить | Цитировать Сообщить модератору
 Re: XML не содержащий знания из другой таблицы  [new]
Wisky
Member

Откуда: Москва
Сообщений: 163
мне надо чтоб в сross join остались только те значения таблицы @d которых нет ни в одном тэге XMLData

P.S. Простите за корявое изъяснение
13 июн 13, 11:32    [14427086]     Ответить | Цитировать Сообщить модератору
 Re: XML не содержащий знания из другой таблицы  [new]
Wisky
Member

Откуда: Москва
Сообщений: 163
Результат должен быть таким

LogIDXMLDataIDDataMart
1<Product ID="C1" DataMart="1" />C22
1<Product ID="C1" DataMart="1" />C12
2<Product ID="C2" DataMart="1" /><Product ID="C2" DataMart="2" />C12
3<Product ID="C2" DataMart="1" /><Product ID="C1" DataMart="2"/> C22
13 июн 13, 12:16    [14427482]     Ответить | Цитировать Сообщить модератору
 Re: XML не содержащий знания из другой таблицы  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Wisky,

select *
from @t t
	cross join @d d
where t.XMLData.exist('/Product[@ID=sql:column("d.ID") and @DataMart=sql:column("d.DataMart")]') = 0
order by t.LogID;
13 июн 13, 13:50    [14428107]     Ответить | Цитировать Сообщить модератору
 Re: XML не содержащий знания из другой таблицы  [new]
Wisky
Member

Откуда: Москва
Сообщений: 163
Спасибо, большое
13 июн 13, 14:02    [14428214]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить