Проблема с этим кодом в том, что в каждой группе не всегда есть CEEBCode.1-й ceebcode, который он находит, фактически находится во второй группе и сопоставляется с другими элементами в 1-й группе.
Есть ли в любом случае, чтобы сохранить группы вместе, когда код Ceeb не существует?
select
UIN,
docXML.value('
(/SelfReportedTranscript/HighSchools/SelfReportedHighSchool/CEEBCode/text())[1]'
,'varchar(6)'
) as ceeb1,
docxml.value
('
(/SelfReportedTranscript/HighSchools/SelfReportedHighSchool/IsGrad/text())[1]'
,'varchar(5)'
) as IsGradAns1,
docxml.value
('
(/SelfReportedTranscript/HighSchools/SelfReportedHighSchool/Country/text())[1]'
,'varchar(25)'
) as Country1,
docXML.value('
(/SelfReportedTranscript/HighSchools/SelfReportedHighSchool/CEEBCode/text())[2]'
,'varchar(6)'
) as ceeb2,
docxml.value
('
(/SelfReportedTranscript/HighSchools/SelfReportedHighSchool/IsGrad/text())[2]'
,'varchar(5)'
) as IsGradAns2,
docxml.value
('
(/SelfReportedTranscript/HighSchools/SelfReportedHighSchool/Country/text())[2]'
,'varchar(25)'
) as Country2
from tblDocument
where docxml is not null
Пример XML:
<SelfReportedTranscript>
<HighSchools>
<SelfReportedHighSchool>
<Name>Ramay Jr High School</Name>
<City>Fayetteville</City>
<Country>United States of America</Country>
<StateProvince>Arkansas</StateProvince>
<IsGrad>false</IsGrad>
<HighSchoolType>Domestic</HighSchoolType>
</SelfReportedHighSchool>
<SelfReportedHighSchool>
<Name>Fayetteville Sr High Sch</Name>
<CEEBCode>040770</CEEBCode>
<City>Fayetteville</City>
<Country>US</Country>
<StateProvince>AR</StateProvince>
<IsGrad>true</IsGrad>
<HighSchoolType>Domestic</HighSchoolType>
</SelfReportedHighSchool>
</HighSchools>
</SelfReportedTranscript>
Это для SQL Server 2005 SP3