3
<Findings>
   <Finding EcinRecordID="1042893">
      <Name>Goal Length of Stay for the ORG</Name>
      <Selected Value="0" DisplayValue="No"/>
   </Finding>
   <Finding EcinRecordID="1042894">
      <Name>Goal Length of Stay for the GRG</Name>
      <Selected Value="1" DisplayValue="Yes"/>
      <NoteText>3 days</NoteText>
   </Finding>
</Findings>

2つの課題:

  1. Findings / Finding / Nameのノード値を選択します。ここで、Findings / Finding / Selected Value = "1"
  2. Findings / Finding/NoteTextのノード値を選択します。Findings/Finding/ Selected Value = "1"

これをストアドプロシージャに入れます。クエリ、存在、値を使用して、少なくとも3ダースのバージョンを試しました。Selected Value = '1'かどうかはわかりますが、Selectステートメントで対応するName値を割り当てることができないようです。

SELECT
   p.value('(Payments[1]/Payment[1]/PreAuthCertNumber)[1]', 'varchar(20)') AS PriorAuthNumber
   ,qa.value('(Name[1])','varchar(255)') AS Question
   ,qa.value('(Findings/Finding/Name)[1]','varchar(255)') AS Answer
    FROM #ValueExample
    CROSS APPLY XMLDocument.nodes('/OutboundDataFeed/Patient/PatientAdmission') as t(p)
    CROSS APPLY XMLDocument.nodes('/OutboundDataFeed/Patient/PatientAdmission/CMAssessments/CMAssessment/Sections/Section/Questions/Question') as u(qa)

ありがとう!

4

2 に答える 2

6
declare @XML xml

set @XML = '
<Findings>
   <Finding EcinRecordID="1042893">
      <Name>Goal Length of Stay for the ORG</Name>
      <Selected Value="0" DisplayValue="No"/>
   </Finding>
   <Finding EcinRecordID="1042894">
      <Name>Goal Length of Stay for the GRG</Name>
      <Selected Value="1" DisplayValue="Yes"/>
      <NoteText>3 days</NoteText>
   </Finding>
</Findings>'

select @XML.value('(/Findings/Finding[Selected/@Value = "1"]/Name/text())[1]', 'varchar(255)') as Name,
       @XML.value('(/Findings/Finding[Selected/@Value = "1"]/NoteText/text())[1]', 'varchar(255)') as NoteText

結果:

Name                                     NoteText
---------------------------------------- -------------------------
Goal Length of Stay for the GRG          3 days
于 2013-01-24T06:48:53.573 に答える
2

参考までに、作業中のXMLフィールドのクエリでこのソリューションを実装しようとすると、上記のMikaelErikssonの回答で提供されている構文が機能しないことがわかりました。構造は正しく、整形式であることを再確認しましたが、結果がnullになるだけでした。

提供された構文(Mikael Erikssonの回答から抜粋)は次のとおりです。

select @XML.value('(/Findings/Finding[Selected/@Value = "1"]/Name/text())[1]', 'varchar(255)') as Name,
       @XML.value('(/Findings/Finding[Selected/@Value = "1"]/NoteText/text())[1]', 'varchar(255)') as NoteText

私が実際にうまくいったのは、次のように少し変更することでした(明らかに、これは私自身のコードスニペットではありませんが、一貫性を保つためです)。

select @XML.value('(/Findings/Finding/Selected[@Value = "1"]/Name/text())[1]', 'varchar(255)') as Name,
       @XML.value('(/Findings/Finding/Selected[@Value = "1"]/NoteText/text())[1]', 'varchar(255)') as NoteText

私がしたのと同じ経験に出くわすかもしれない他の誰かのために私が代わりとして投稿すると思っただけです。

于 2013-11-08T13:39:35.777 に答える