从XML列返回多个类别值

问题描述 投票:0回答:1
`<cassettes>
 <cassette>
    <cassetteId>A</cassetteId>
    <capacity>290</capacity>
    <denominations>
      <denomination>
        <value>1</value>
        <currency>US</currency>
        <notesAvailable>398</notesAvailable>
        <notesToDispense>24</notesToDispense>
        <notesDispensed>24</notesDispensed>
        <notesDeposited>0</notesDeposited>
        <notesSuggested>398</notesSuggested>
      </denomination>
    </denominations>
    <status>0</status>
    <position>0</position>
  </cassette>...`

以上是xml列值的节选。有关金额的节点是 "notedispensesed".有12个cassetteId's A-K。每个卡带存放一个面额。例如:卡匣A & B包含1s,卡匣C包含5s,卡匣D & E包含10s等等。

下面的select stmt返回cassetteId A的值24,我想避免为每个盒式磁带写出12次。有没有一种方法可以根据面额值返回分配的金额。任何解决方案都非常感激

Select column.value('(/cassettes/cassette/denominations/denomination/notesDispensed)[1]','varchar(max)') 
sql-server xml-parsing
1个回答
0
投票

这看起来像你使用sql:variable寻找的东西吗?

DECLARE @iterator = 1

SELECT 
    Child.value('(/cassettes/cassette/denominations/denomination/notesDispensed)[1]', 'varchar(max)'),
FROM
    XMLField.nodes("/cassettes/denomination[sql:variable("@iterator")]/ChildNode") AS N(Child)
© www.soinside.com 2019 - 2024. All rights reserved.