XMLから親値と子値を一緒に取得しようとすると問題が発生します。コードは以下のように見えますが、親あたり1人の子供しか検索できません。親と一緒にすべての子供を選択するにはどうすればいいですか?XMLの親値と子値を一緒に選択する
declare @x xml;
set @x = '
<Parent ParentID="1" ParentName="Mary">
<Child ChildID="2" ChildName="Paul" />
<Child ChildID="3" ChildName="Alan" />
<Child ChildID="4" ChildName="David" />
</Parent>
<Parent ParentID="5" ParentName="James">
<Child ChildID="6" ChildName="Amy" />
<Child ChildID="7" ChildName="Julie" />
</Parent>
';
select
tbl.col.value('@ParentID', 'int') AS ParentID,
tbl.col.value('@ParentName', 'varchar(50)') AS ParentName,
tbl.col.value('Child[1]/@ChildID[1]', 'int') AS ChildID,
tbl.col.value('Child[1]/@ChildName[1]', 'varchar(50)') AS ChildName
from @x.nodes('/Parent') as tbl(col);
私は、次のような結果を得るが、親がすべての子ノードに対して繰り返したいです。
ParentID ParentName ChildID ChildName
1 Mary 2 Paul
5 James 6 Amy
問題はChild [1]ですが、回避方法はわかりません。私はSQLの変数を試みたが、どちらも動作するcouldnt。理想的には、私は以下を見たいと思っています:
ParentID ParentName ChildID ChildName
1 Mary 2 Paul
1 Mary 3 Alan
1 Mary 4 David
5 James 6 Amy
5 James 7 Julie
何か助けていただければ幸いです。ありがとう。