0

これは、ここに投稿された質問からさらに進んでいます: link。提案されたソリューションはうまく機能しましたが、SQL が 3 番目のネストされた を作成できないため、より難しいシナリオがあり、同じソリューションは適用されませんSELECT。現在のシナリオは、dubタグをそれぞれの内部で繰り返すことができlocation、それぞれdubに複数のdataタグを含めることができるというものです。例:

<locations>
  <location>
    <loc name="Country 1" id="1" />
    <dubs>
      <dub name="City 1">
        <data year="1950" value="2.43" />
        <data year="1955" value="2.55" />
      </dub>
      <dub name="City 2">
        <data year="1950" value="5.67" />
        <data year="1955" value="4.42" />
      </dub>
    </dubs>
  </location>
  <location>
    <loc name="Country 2" id="2" />
    <dubs>
      <dub bane="City ABC">
        <data year="1950" value="4.54" />
        <data year="1955" value="42.15" />
      </dub>
    </dubs>
  </location>
</locations>

3 番目のネストを実行しようとしましたSELECTが、許可されていません: SQL Fiddle - Not Working

select T.Country as 'loc/@name',
       T.ID as 'loc/@id',
       (
         select [City] as 'dub/@name',
         (
           select 1950 as 'dub/data/@year',
                  T.[1950] as 'dub/data/@value',
                  null,
                  1955 as 'dub/data/@year',
                  T.[1955] as 'dub/data/@value'
           for xml path(''), type
          ) as dub
       ) as dubs
from YourTable as T
for xml path('location'), root('locations'), type

元の質問のソリューションを変更し、次のクエリを作成しました。これはほとんど機能します: SQL Fiddle - ほぼ動作中

    select T.Country as 'loc/@name',
       T.ID as 'loc/@id',
       (
         select [City] as 'dub/@name',
                 1950 as 'dub/data/@year',
                  T.[1950] as 'dub/data/@value',
                  null,
                  1955 as 'dub/data/@year',
                  T.[1955] as 'dub/data/@value'
           for xml path(''), type
       ) as dubs
from YourTable as T
for xml path('location'), root('locations'), type

ただし、タグがタグdata内でグループ化されていないことがわかります。タグは、空白の属性コンテンツで再作成されています。何か助けはありますか?dubdubname

4

1 に答える 1