按顺序显示sql xml数据

时间:2018-07-02 09:34:07

标签: sql sql-server xml

我在表中有以下XML节点。但是,当我获取数据时,我无法正确读取数据

SELECT Data.value('(/*//Plans/Plan/Coverages/Coverage/Answers/Entry[@key="NumberOfHoldDays"]/value)[1]', 'nvarchar(max)') as PLANA
,Data.value('(/*//Plans/Plan/Coverages/Coverage/Answers/Entry[@key="NumberOfHoldDays"]/value)[2]', 'nvarchar(max)') AS PLANB
,Data.value('(/*//Plans/Plan/Coverages/Coverage/Answers/Entry[@key="NumberOfHoldDays"]/value)[3]', 'nvarchar(max)') AS PLANC 
FROM Maintenance

如果我在那里读到上面的XML数据

SNO    PLan A PLan B Plan C
1      11      22      33
2      NULL    44      55

Output for above example :

SNO    PLan A PLan B Plan C
1      11      22      33
2      NULL    44      55

But now for the above query it shows as below :

SNO    PLan A PLan B Plan C
1      11      22      33
2      44      55     NULL

Xml示例如下:

<Plans>
  <Plan>
   <Coverages>
    <Coverage>
      <Answers>
           <Entry key="NumberOfHoldDays" type="System.String">
                <value>5</value>
              </Entry>
  </Answers>
  </Coverage>
</Coverages>
<ID>1</ID>
 </Plan>
<Plans>
  <Plan>
   <Coverages>
    <Coverage>
      <Answers>
           <Entry key="NumberOfHoldDays" type="System.String">
                <value>55</value>
              </Entry>
  </Answers>
  </Coverage>
</Coverages>
<ID>2</ID>
 </Plan>

<Plans>
  <Plan>
   <Coverages>
    <Coverage>
      <Answers>
           <Entry key="NumberOfHoldDays" type="System.String">
                <value>50</value>
              </Entry>
  </Answers>
  </Coverage>
</Coverages>
<ID>3</ID>
 </Plan>
</Plans>

我如何基于ID标记读取XML以获取适当的值,我正在使用类似下面的内容,但是它不起作用

1 个答案:

答案 0 :(得分:0)

以下代码有效:

SELECT Data.value('(/*//Plans/Plan[ID="1"]/Coverages/Coverage/Answers/Entry[@key="NumberOfHoldDays"]/value)[1]', 'nvarchar(max)') as PLANA
,Data.value('(/*//Plans/Plan[ID="2"]/Coverages/Coverage/Answers/Entry[@key="NumberOfHoldDays"]/value)[1]', 'nvarchar(max)') AS PLANB
,Data.value('(/*//Plans/Plan[ID="3"]/Coverages/Coverage/Answers/Entry[@key="NumberOfHoldDays"]/value)[1]', 'nvarchar(max)') AS PLANC 
FROM Maintenance