3

ALL_MRNテーブルの列に次の XML がありますPID3

<Repetitions>
 <Repetition>
  <Field>10228^^^L8 MRN^MRN</Field>
  <Component_1>10228</Component_1>
  <Component_2>L8 MRN</Component_2>
  <Component_3>MRN</Component_3>
 </Repetition>
 <Repetition>
  <Field>00283^^^CMRN^CMRN</Field>
  <Component_1>00283</Component_1>
  <Component_2>CMRN</Component_2>
  <Component_3>CMRN</Component_3>
 </Repetition>
 <Repetition>
  <Field>00294^^^L7 MRN^MRN</Field>
  <Component_1>00283</Component_1>
  <Component_2>L7 MRN</Component_2>
  <Component_3>MRN</Component_3>
 </Repetition>
</Repetitions>

タグのCMRN値を見つけようとしています。見つかった場合は、値を連結して文字列を形成します。Component_3Component_1Component_3

カーソルやループを使用せずに可能ですか? この連結された文字列を取得する最良の方法は何ですか?

4

3 に答える 3

2

これはどう:

SELECT
    C1_and_C3 = XRep.value('(Component_1)[1]', 'varchar(50)') + XRep.value('(Component_3)[1]', 'varchar(50)')
FROM 
    dbo.ALL_MRN
CROSS APPLY 
    PID3.nodes('/Repetitions/Repetition') AS XTbl(XRep)
WHERE
    XRep.value('(Component_3)[1]', 'varchar(50)') = 'CMRN'

SQL Server 2005 以降では、非常に優れた XQuery サポートが提供されています。カーソルはまったく必要ありません。

<Component_3>ところで: あなたの XML は無効です</Component_5><Component_2>....</Component_4>

于 2013-08-15T19:40:24.527 に答える
1

出来た。PID3 は varchar 型だったので、XML にキャストする必要がありました。こちらが更新版です。

SELECT
  C1_and_C3 = XRep.value('(Component_1)[1]', 'varchar(50)') + XRep.value('(Component_3)[1]', 'varchar(50)')
FROM 
  dbo.ALL_MRN
CROSS APPLY 
  (select cast(PID3 as XML) ) as t1(x)
CROSS APPLY 
  x.nodes('/Repetitions/Repetition') AS XTbl(XRep)
WHERE
  XRep.value('(Component_3)[1]', 'varchar(50)') = 'CMRN'
于 2013-08-15T21:23:25.143 に答える