В моей базе данных у меня есть таблица с XML в следующем формате:
<grdCharges>
<Row>
<Code>92015</Code>
<Description>Manifest Refraction</Description>
<Units />
<Mod1 />
<Mod2 />
<Mod3 />
<Mod4 />
<Ptr1>1</Ptr1>
<Ptr2 />
<Ptr3 />
<Ptr4 />
</Row>
<Row>
<Code>92014</Code>
<Description>Established Patient Comprehensive 180 (108)</Description>
<Units />
<Mod1 />
<Mod2 />
<Mod3 />
<Mod4 />
<Ptr1>1</Ptr1>
<Ptr2 />
<Ptr3 />
<Ptr4 />
</Row>
</grdCharges>
И я хочу преобразовать ее в следующий вывод:
id Code Description
1 92015 Manifest Refraction
1 92014 Established Patient Comprehensive 180 (108)
Я пытался сделатьэто так:
Create table #XML
( id int
, xmldata xml
)
insert into #xml values
( 1
, '<grdCharges>
<Row>
<Code>92015</Code>
<Description>Manifest Refraction</Description>
<Units />
<Mod1 />
<Mod2 />
<Mod3 />
<Mod4 />
<Ptr1>1</Ptr1>
<Ptr2 />
<Ptr3 />
<Ptr4 />
</Row>
<Row>
<Code>92014</Code>
<Description>Established Patient Comprehensive 180 (108)</Description>
<Units />
<Mod1 />
<Mod2 />
<Mod3 />
<Mod4 />
<Ptr1>1</Ptr1>
<Ptr2 />
<Ptr3 />
<Ptr4 />
</Row>
</grdCharges>'
)
select id,
X.Y.value('.','Varchar(100)') Code
,P.Q.value('.','Varchar(100)') Description
from #xml
Cross apply xmldata.nodes('/grdCharges/Row/Code') X(Y)
Cross apply Y.nodes('/grdCharges/Row/Description') P(Q)
Но это дает мне следующий результат:
id Code Description
1 92015 Manifest Refraction
1 92015 Established Patient Comprehensive 180 (108)
1 92014 Manifest Refraction
1 92014 Established Patient Comprehensive 180 (108)
Я считаю, что проблема со вторым крестом применима.Как мне использовать второй крест применить?
Если не cross apply
, то что еще я могу сделать, чтобы получить желаемый результат?Мне нужна помощь с этим.