XML列を持つテーブルを持つデータベースがあります。XMLデータには、次のような子ノードが多数あります。
<test>
<result id="1234">
<data elementname="Message">some error message</data>
<data elementname="Cat">Cat01</data>
<data elementname="Type">WARNING</data>
</result>
<result id="5678">
<data elementname="Message">some error message</data>
<data elementname="Cat">Cat01</data>
<data elementname="Type">WARNING</data>
</result>
</test>
Cat要素には、さまざまな値を設定できます。このデータに関するレポートを作成しようとしているので、データ全体のすべてのカテゴリのリストを取得したいと思います。これは私の質問です:
Select Id, XmlData.query('/test/result/data[@elementname = ''Cat''] ') AS Message
From Table
WHERE XmlData.exist('/test/result/data[@elementname = ''Cat'']') = 1
ORDER BY FriendlyName
これにより、このタイプの分類でテーブル内のすべての行が正しく取得されます(その要素がない同じテーブルには他の結果があります)が、カテゴリはすべて、テーブルレコードごとに1つの列に結合されます。
Id1, <data elementname="Cat">Cat01</data><data elementname="Cat">Cat01</data>
Id2, <data elementname="Cat">Cat01</data><data elementname="Cat">Cat01</data>
Id列を含めているので、データがどこから来ているのかを簡単に確認できます。主な問題は、各行の値を連結するためにしか取得できないことです。これらの各データ要素には独自の行が必要です。次に、結果に対してSelectDistinctを実行します。
それができる方法はありますか?
ありがとう