이것은 여기에 게시 된 질문에서 더 나아갑니다 : link . 제안 된 솔루션이 잘 작동했지만 이제는 더 어려운 시나리오가 있으며 SQL이 세 번째 중첩 .NET을 만들 수 없기 때문에 동일한 솔루션이 적용되지 않습니다 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>
세 번째 중첩을 시도했지만 SELECT
허용되지 않습니다. SQL Fiddle-작동하지 않음
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-Almost Working
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
속성 내용. 도움이 필요하세요?
고마워, 개스 퍼, 당신은 매우 도움이되었습니다! (Gasper는 나의 상상의 친구입니다)
아래에서 해결책을 찾았습니다. SQL Fiddle
select Country as 'loc/@name',
ID as 'loc/@id',
(
select [City] as 'dub/@name',
(
select 1950 as 'data/@year',
[1950] as 'data/@value',
null,
1955 as 'data/@year',
[1955] as 'data/@value'
from YourTable as D
where Country = C.Country
and City = T.City
for xml path(''), type
) as 'dub/datavalues'
from
(
select distinct City
from YourTable
where Country = C.Country
) as T
for xml path(''), type
) as 'loc/dubs'
from
(
select distinct Country, ID
from YourTable
) as C
for xml path(''), root('locations'), type
:)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다