您好我将XML数据存储在表格中。 XML Data看起来像这样。
<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
答案 0 :(得分: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')