これは、ここに投稿された質問からさらに進んでいます: 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
内でグループ化されていないことがわかります。タグは、空白の属性コンテンツで再作成されています。何か助けはありますか?dub
dub
name