запрос XML, когда есть неровные элементы - PullRequest
2 голосов
/ 23 ноября 2011

Проблема с этим кодом в том, что в каждой группе не всегда есть 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

1 Ответ

0 голосов
/ 23 ноября 2011

Попробуй это. Добавлены [1] и [2] в тег SelfReportedHighSchool, поскольку именно здесь вы получаете "строки". Также необходимо изменить окончательный [2] на [1].

select 
UIN,
docXML.value('
    (/SelfReportedTranscript/HighSchools/SelfReportedHighSchool[1]/CEEBCode/text())[1]' 
    ,'varchar(6)'
    ) as ceeb1,
docxml.value
    ('
    (/SelfReportedTranscript/HighSchools/SelfReportedHighSchool[1]/IsGrad/text())[1]'
    ,'varchar(5)'
    ) as IsGradAns1,
docxml.value
    ('
    (/SelfReportedTranscript/HighSchools/SelfReportedHighSchool[1]/Country/text())[1]' 
    ,'varchar(25)'
    ) as Country1,
docXML.value('
    (/SelfReportedTranscript/HighSchools/SelfReportedHighSchool[2]/CEEBCode/text())[1]' 
    ,'varchar(6)'
    ) as ceeb2,
docxml.value
    ('
    (/SelfReportedTranscript/HighSchools/SelfReportedHighSchool[2]/IsGrad/text())[1]'
    ,'varchar(5)'
    ) as IsGradAns2,
docxml.value
    ('
    (/SelfReportedTranscript/HighSchools/SelfReportedHighSchool[2]/Country/text())[1]' 
    ,'varchar(25)'
    ) as Country2
from tblDocument
where docxml is not null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...