【问题标题】:Count Elements with in XML Datatype使用 XML 数据类型计算元素
【发布时间】:2014-03-03 15:18:50
【问题描述】:

您好,我将 XML 数据存储在一个表中。 XML 数据看起来像这样。

<Contacts>
  <Contact>
    <Name>Evan Gabriel</Name>
    <PhoneNumbers>
      <PhoneNumber Type="Home" Number="555-1224" />
      <PhoneNumber Type="Work" Number="578-9812" />
      <PhoneNumber Type="Cell" Number="578-7299" />
    </PhoneNumbers>
  </Contact>
  <Contact>
    <Name>Elizabeth Dallas</Name>
    <PhoneNumbers>
      <PhoneNumber Type="Home" Number="714-5488" />
      <PhoneNumber Type="Cell" Number="714-1099" />
    </PhoneNumbers>
  </Contact>
  <Contact>
    <Name>Anna Palmer</Name>
    <PhoneNumbers>
      <PhoneNumber Type="Work" Number="555-1440" />
      <PhoneNumber Type="Cell" Number="714-0523" />
    </PhoneNumbers>
  </Contact>
</Contacts>

我要做的是获取每个客户的联系号码计数,并且我希望重新调整的输出采用 XML 数据类型。

我想要的输出如下:

<Contacts>
  <Contact>
    <Name>Elizabeth Dallas</Name>
    <NumFound>2</NumFound>
  </Contact>
  <Contact>
    <Name>Anna Palmer</Name>
    <NumFound>2</NumFound>
  </Contact>
  <Contact>
    <Name>Evan Gabriel</Name>
    <NumFound>3</NumFound>
  </Contact>
</Contacts> 

以下是我的尝试:

SELECT
    COUNT(*) AS NumCount
FROM
   (SELECT Xml_DATA FROM Xml_Table) AS XmlTable(XmlColumn)
CROSS APPLY 
   XmlColumn.nodes('/Contacts/Contact/Name/PhoneNumbers/PhoneNumber') XmlTableFunction(XmlColumn2)

但我认为我离实际解决方案还差得很远。非常感谢任何正确方向的帮助或指示。

在此先感谢您。

SQL FIDDLE with Test Data and My Attempt

【问题讨论】:

    标签: sql-server xml sql-server-2008 xquery


    【解决方案1】:

    试试这个:

    declare @Contacts xml = '<Contacts>
      <Contact>
        <Name>Evan Gabriel</Name>
        <PhoneNumbers>
          <PhoneNumber Type="Home" Number="555-1224" />
          <PhoneNumber Type="Work" Number="578-9812" />
          <PhoneNumber Type="Cell" Number="578-7299" />
        </PhoneNumbers>
      </Contact>
      <Contact>
        <Name>Elizabeth Dallas</Name>
        <PhoneNumbers>
          <PhoneNumber Type="Home" Number="714-5488" />
          <PhoneNumber Type="Cell" Number="714-1099" />
        </PhoneNumbers>
      </Contact>
      <Contact>
        <Name>Anna Palmer</Name>
        <PhoneNumbers>
          <PhoneNumber Type="Work" Number="555-1440" />
          <PhoneNumber Type="Cell" Number="714-0523" />
        </PhoneNumbers>
      </Contact>
    </Contacts>'
    
    select 
        c.query('*[local-name()!="PhoneNumbers"]'),
        NumFound = c.value('count(.//PhoneNumber)', 'int')
    from @Contacts.nodes('//Contact') c(c)
    for xml path('Contact'), root('Contacts')
    

    【讨论】:

    • 干杯丹尼斯我已经找到了一个解决方案,但它有点复杂你建议的方法很简单,谢谢百万好友:)
    猜你喜欢
    • 2021-12-07
    • 2016-03-13
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    相关资源
    最近更新 更多