我正在使用XQuery,我需要在Xquery中转换(,)sepereated格式或使用group by。
Final Output
grp|A|#A
grp|A4|#A
grp|A2|#A
grp|A1|#A
Expected Output
grp|A,A4,A2,A1|#A
我的Xquery:
let $root := 'grp'
let $uri := for $i in fn:collection('collection')
return fn:document-uri($i)
let $result := for $each-uri in $uri
let $title := (doc($each-uri)//grp/title/text())[1]
let $id := (doc($each-uri)//grp/@id)[1]
let $root := 'grp'
return fn:concat($root,'|',$id,'|',$title)
return fn:distinct-values($result)
答案 0 :(得分:1)
我认为只缺少分组和string-join
来电。
let $root := 'grp'
let $uri := for $i in fn:collection('collection')
return fn:document-uri($i)
let $result := for $each-uri in $uri
let $title := (doc($each-uri)//grp/title/text())[1]
let $id := (doc($each-uri)//grp/@id)[1]
let $root := 'grp'
group by $root, $title
return fn:concat($root,'|',string-join($id, ","),'|',$title)
return fn:distinct-values($result)
虽然可能需要将distinct-values
移动到ID,concat
也可以替换为string-join
,如下所示:
let $root := 'grp'
let $uri := for $i in fn:collection('collection')
return fn:document-uri($i)
let $result := for $each-uri in $uri
let $title := (doc($each-uri)//grp/title/text())[1]
let $id := (doc($each-uri)//grp/@id)[1]
let $root := 'grp'
group by $root, $title
return string-join(
($root, string-join(distinct-values($id), ","), $title),
'|'
)
return $result