1

私は xml 変数を持っています。この入力 xml を以下のようにリレーショナル テーブル出力に細分化したいと考えています。

入力

  declare @x xml
  set @x =
  '<groupNodes>
        <groupSet name="groupset1" id="10001">
              <condition id="7">contains</contains>
              <group name="group11" id="11">100</group>
              <group name="group12" id="19">460</group>
              <group name="group13" id="24">450</group>
              <group name="group14" id="23">440</group>
        </groupSet>
        <groupSet name="groupset2" id="10002">
              <condition id="3">equals</contains>
              <group name="group21" id="21">370</group>
              <group name="group22" id="27">543</group>
        </groupSet>
        <groupSet name="groupset3" id="10003">
              <condition id="7">contains</contains>
              <group name="group31" id="31">760</group>
              <group name="group32" id="38">450</group>
              <group name="group33" id="39">420</group>
               ..
               ..
        </groupSet>
        ..
  </groupNodes>'

出力

groupSetName      groupSetId   groupName      groupId            groupValue conditionId
-------------      ------------ --------------------------------------
groupset1            1001      group11            11            100          7
groupset1            1001      group12            19            460          7
groupset1            1001      group13            24            450          3
groupset1            1001      group14            23            440          3 
groupset2            1002      group21            21            370          3
groupset2            1002      group22            27            543          3
groupset3            1003      group31            31            760          7
groupset3            1003      group32            38            450          7
groupset3            1003      group33            39            420          7 

以下で何かを試しています。各子ノードの最初の行のみを提供しています。すべてが来るわけではありません。また、グループセットとグループ列を実行できます。条件ノードを実行できません。

  select 
        tab.col.value('(@name)[1]', 'nvarchar(100)') groupSetName,
        tab.col.value('(@id)[1]', 'nvarchar(100)') groupSetId,
        tab.col.value('(./group/@name)[1]', 'nvarchar(100)') groupId,
        tab.col.value('(./group/@id)[1]', 'nvarchar(100)') groupName,
        tab.col.value('(./group)[1]', 'nvarchar(100)') groupValue
  from @x.nodes('groupNodes/groupSet') as tab(col)

誰か助けてください。私は非常に一生懸命努力していますが、理解できませんでした。

4

1 に答える 1

1

代わりにこれを試してください。

select   
    tab.col.value('../@id', 'nvarchar(100)') groupsetName,  
    tab.col.value('../@name', 'nvarchar(100)') groupsetId,  
    tab.col.value('@id', 'nvarchar(100)') groupname,  
    tab.col.value('@name', 'nvarchar(100)') groupID,  
    tab.col.value('.', 'nvarchar(100)') groupValue,
    tab.col.value('(../condition/@id)[1]','int')  
from @x.nodes('groupNodes/groupSet/group') as tab(col)  
于 2012-10-05T14:01:25.537 に答える