在我的数据库中,我有一个带有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,那么我还能做些什么来获得所需的结果呢?这件事我需要帮助。
发布于 2018-06-05 09:00:47
你自己的尝试相当接近..。
使用APPLY获取重复节点的派生表。这是<Row>,而<Row>中的节点是要获取的值:
select id,
X.Y.value('(Code/text())[1]','Varchar(100)') Code
,X.Y.value('(Description/text())[1]','Varchar(100)') Description
from #xml
Cross apply xmldata.nodes('/grdCharges/Row') X(Y) https://stackoverflow.com/questions/50696083
复制相似问题