我在oracle表XML列中具有以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<Employee>
<Emp_information emp_name="SSS">
</Emp_information>
<emp_content>
<emp_part part_id="A" >
<emp_scoring_information equivalent_value="Test" >
<empset empset_weight="1">
<emp_key value="1"/>
</empset>
</emp_scoring_information>
</emp_part>
<emp_part part_id="B" >
<emp_scoring_information equivalent_value_flag="Test1" >
<empset empset_weight="1" >
<emp_key value="1"/>
<emp_key value="2"/>
</empset>
</emp_scoring_information>
</emp_part>
</emp_content>
</Employee>
我正在尝试使用oracle查询以以下格式显示值
A=1,B=1,2
如何解决此问题,以使用SQL查询打印以下格式的数据?
我想详细解释输出值(A = 1,B = 1,2)(A = 1)A是emp_part中的值(part_id值)=是静态值,1是empset中的值emp_key值,就像它对下一个emp_part也需要做同样的事情一样(part_id B)具有多个emp_key值的empset,在这种情况下,它需要显示B = 1,2,每个emppart都用逗号分隔(A = 1,B = 1,2)。
答案 0 :(得分:2)
with src as (select xmltype('<Employee>
<Emp_information emp_name="SSS">
</Emp_information>
<emp_content>
<emp_part part_id="A" >
<emp_scoring_information equivalent_value="Test" >
<empset empset_weight="1">
<emp_key value="1"/>
</empset>
</emp_scoring_information>
</emp_part>
<emp_part part_id="B" >
<emp_scoring_information equivalent_value_flag="Test1" >
<empset empset_weight="1" >
<emp_key value="1"/>
<emp_key value="2"/>
</empset>
</emp_scoring_information>
</emp_part>
</emp_content>
</Employee>') xml from dual)
select xmlquery('string-join($d/Employee/emp_content/emp_part/concat(@part_id,"=",string-join(emp_scoring_information/empset/emp_key/@value,",") ),",")' passing xml as "d" returning content) from src
string-join
-使用分隔符连接字符串序列
concat
-连接字符串str1 + str2 +等。
它的工作原理类似于两个循环,第一个循环选择@part_id
,第二个循环选择并聚集依赖的@values