У меня есть таблица, как этотКак объединить несколько запросов XPath в один
create table [Trades] (
[Id] int not null
,[TradeXML] xml not null
)
вот содержимое столбца TradeXML XML
<Trade>
<Arg>
<Name>Id</Name>
<Data>
<DataItem DataType="8"></DataItem>
</Data>
</Arg>
<Arg>
<Name>Function</Name>
<Data>
<DataItem DataType="8">CapFloor</DataItem>
</Data>
</Arg>
<Arg>
<Name>Curve</Name>
<Data>
<DataItem DataType="8">EURCurve</DataItem>
</Data>
</Arg>
<Arg>
<Name>Rates</Name>
<Data>
<DataItem DataType="5">2.175</DataItem>
<DataItem DataType="5">2.169</DataItem>
<DataItem DataType="5">2.714</DataItem>
<DataItem DataType="5">3.394</DataItem>
<DataItem DataType="5">3.931</DataItem>
<DataItem DataType="5">4.477</DataItem>
<DataItem DataType="5">4.296</DataItem>
</Data>
</Arg>
<Arg>
<Name>Index</Name>
<Data>
<DataItem DataType="8">EURIBOR</DataItem>
</Data>
</Arg>
</Trade>
это SqL
select Node.Name.value('.', 'varchar(100)') Label
from Trades as t
cross apply t.TradeXML.nodes('//Arg/Name') Node(Name)
возвращает 5 строки:
Id
Function
Curve
Rates
Index
это SQL
select Data.Name.value('.','varchar(100)') Value
from Trades as t
cross apply t.TradeXML.nodes('//Arg/Data/DataItem[1]') Data(Name)
возвращает 5 строк:
CapFloor
EURCurve
2.175
EURIBOR
и это
select Attribute.Name.query('local-name(.)') Attribute
,Attribute.Name.value('.', 'varchar(100)') Value
from Trades as t
cross apply t.TradeXML.nodes('//@*') Attribute(Name)
возвращает 11 строк:
DataType 8
DataType 8
DataType 8
DataType 5
DataType 5
DataType 5
DataType 5
DataType 5
DataType 5
DataType 5
DataType 8
но что я хочу это сочетание этого (так в основном Имя, (первое) значение DataItem и значение атрибута DataType (первого) DataItem), как это:
Id
Function CapFloor 8
Curve EURCurve 8
Rates 2.175 5
Index EURIBOR 8
Я сохранил его в rextester играть. Я попытался объединить их сам, но не смог получить правильный результат. любая помощь будет оценена!
, который выглядит так просто, потрясающе, спасибо! – Eddict