Если честно: может быть проще прочитать это в виде таблицы и воссоздать XML с нуля.
Но XQuery вам тоже может помочь:
create table test12
(
id int,
data xml
);
- Я добавил несколько узлов и изменил <Value>
, чтобы отразить данный узел
insert into test12 (id,data)
values (1,
'<test1>
<Attribute>FGHH</Attribute>
<Value>blah 1</Value>
</test1>
<test1>
<Attribute>OneMore</Attribute>
<Value>blah 1</Value>
</test1>
<test1>
<Attribute>FGHH</Attribute>
<Value>blah 2</Value>
</test1>
<test1>
<Attribute>SomeOther</Attribute>
<Value>blah 1</Value>
</test1>'
);
GO
- Это запрос
SELECT t.id
,t.data.query('for $attrValue in distinct-values(/test1/Attribute/text())
return /test1[Attribute = $attrValue][1]')
FROM test12 t;
Идея вкратце:
Функция XQuery
distinct-values()
вернет отдельный список всех значений по заданному пути.В этом случае мы получаем список text()
-узлов назад.
Теперь мы можем перебрать этот список и вернуть первое вхождение каждого элемента <test1>
, где <Attribute>
равно переменной списка.В результате мы получаем первые из каждого вида обратно:
<test1>
<Attribute>FGHH</Attribute>
<Value>blah 1</Value>
</test1>
<test1>
<Attribute>OneMore</Attribute>
<Value>blah 1</Value>
</test1>
<test1>
<Attribute>SomeOther</Attribute>
<Value>blah 1</Value>
</test1>