在我的数据库表中,我有一个XML列。
XML列中的值如下所示:
ROW1 :
<Data>
<COLRowData>
<DORowData>
<PrimaryValue>Fever</PrimaryValue>
<EMRValue1> 101 <EMRValue1 />
<DataRowType>Past</DataRowType>
<HasPositiveValue>True</HasPositiveValue>
</DORowData>
<DORowData>
<PrimaryValue>Hypertension</PrimaryValue>
<DataRowType>Present</DataRowType>
<EMRValue1> No </EMRValue1>
<HasPositiveValue>False</HasPositiveValue>
</DORowData>
</COLRowData>
</Data>
行2 :
<Data>
<COLRowData>
<DORowData>
<PrimaryValue>Diabetes</PrimaryValue>
<DataRowType>Past</DataRowType>
<EMRValue1> No </EMRValue1>
<HasPositiveValue>True</HasPositiveValue>
</DORowData>
<DORowData>
<PrimaryValue>Fever</PrimaryValue>
<DataRowType>Present</DataRowType>
<EMRValue1> 103 <EMRValue1 />
<HasPositiveValue>True</HasPositiveValue>
</DORowData>
</COLRowData>
</Data>
从这个表中我想找到所有这些行,其中以下数据组合存在于单个XML列中:
我正在使用此查询:
Select * From TABLE
WHERE
XML.exist('/Data/COLRowData/DORowData/DataRowType/text()[. = "Present"]') = 1
and
XML.exist('/Data/COLRowData/DORowData/PrimaryValue/text()[. = "Fever"]') = 1
此查询返回两行,根据我的要求,我应该只根据上面提到的组合找到Row2。
请帮我查询
另外,我如何在满足where子句的XML中包含EMRValue1 - Select语句中的值?
谢谢我。 但是因为我的where子句只满足来自这个块的数据
<DORowData>
<PrimaryValue>Fever</PrimaryValue>
<DataRowType>Present</DataRowType>
<EMRValue1> 103 <EMRValue1 />
<HasPositiveValue>True</HasPositiveValue>
</DORowData>
Select子句中的EMRValue1只应返回1行,其中EMRValue1 = 103
答案 0 :(得分:1)
您应该在同一个XPath中组合两个条件:
select * from [TABLE]
where
XML.exist('/Data/COLRowData/DORowData[DataRowType/text()[. = "Present"] and PrimaryValue/text()[. = "Fever"]]') = 1
要在选择列表中加入EMRValue1
:
select d.*, T.c.value('text()[1]', 'varchar(200)') EMRValue1
from [TABLE] d
cross apply d.XML.nodes('/Data/COLRowData/DORowData/EMRValue1') T(c)
where d.XML.exist(...) = 1
请注意,由于每行EMRValue1
数据中有多个XML
元素,因此会返回返回的行数