以下XML示例显示了“主”类型的数据记录,这些数据记录链接到“系列”类型的0..N内容。我想检测具有相同title()属性的Master的现有Series记录的数量。
<?xml version="1.0" encoding="UTF-8"?>
<program_file fechaCreacion="20180919184224">
<version>1.0</version>
<programs>
<program id_programa="1">
<tipo_programa>Master</tipo_programa>
<titulo >tit1</titulo>
<año>2018</año>
</program>
<program id_programa="2">
<tipo_programa>Master</tipo_programa>
<titulo >tit1</titulo>
<año>2018</año>
</program>
<program id_programa="3">
<tipo_programa>Master</tipo_programa>
<titulo >tit2</titulo>
<año>2018</año>
</program>
<program id_programa="5">
<id_serie>1</id_serie>
<tipo_programa>Series</tipo_programa>
<episodio>8</episodio>
<temporada>1</temporada>
<titulo >tit1</titulo>
<año>2018</año>
</program>
<program id_programa="6">
<id_serie>2</id_serie>
<tipo_programa>Series</tipo_programa>
<episodio>8</episodio>
<temporada>1</temporada>
<titulo >tit1</titulo>
<año>2018</año>
</program>
<program id_programa="7">
<id_serie>3</id_serie>
<tipo_programa>Series</tipo_programa>
<episodio>8</episodio>
<temporada>1</temporada>
<titulo >tit2</titulo>
<año>2018</año>
</program>
</programs>
</program_file>
我设法使用Group by进行了查询,以给我正确的结果(使用BaseX)
let $dup_masters := doc("C:/Users/fgarcia/Documents/Optiva/Orange/programs_sample.xml")/program_file/programs
return
<distinct-names> {
for $dups in $dup_masters/program
order by $dups/titulo
group by $title := $dups/titulo
return
if(count(distinct-values($dups[tipo_programa="Master"]/@id_programa)) > 1) then
element {"Master"}
{
attribute {"title"} {$title},
for $id in distinct-values($dups[tipo_programa="Master"]/@id_programa)
return (
<td>{$id}</td>,
<td>{count($dups[id_serie=($id)])}</td>
)
}
else ()
}</distinct-names>
问题在于,当我将此代码移至Exist-db时,我没有得到任何结果,并且我想知道这是否与Group By in的实现有关。欢迎以不同方式解决此问题的任何想法/提示!