2017-07-07 29 views
1

私はXQueryを使用していますが、Xqueryで(、)分割形式またはグループを使用する必要があります。Xqueryで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

あなたがどこ立ち往生している、何をしようとしたのですか? –

+0

私はXMLからデータを取得し、パイプ記号に連結した後、#Aは繰り返される値なので、この形式を変更する必要がありますgrp | A、A4、A2、A1 | #A – Antony

+0

コードを共有してください。 – grtjn

答えて

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 
+0

おかげさまで、ありがとうございます。 XDMP-UNEXPECTED:(err:XPST0003)予期せぬトークン構文エラー、予期しないQName_ – Antony

+0

を使用していないグループは正常に動作しています。 – Antony

+0

グループで問題があると思います – Antony

関連する問題