我有一个类似于以下内容的 XML 列;
DECLARE @str AS VARCHAR(8000)
SET @str = '<Root xmlns="http://myurl.com/services/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Notifications>
<Notification>
<NotificationDate>2012-08-16</NotificationDate>
<Scopes>
<NotificationScope>
<Code>a</Code>
</NotificationScope>
<NotificationScope>
<Code>b</Code>
</NotificationScope>
</Scopes>
</Notification>
<Notification>
<NotificationDate>2012-08-20</NotificationDate>
<Scopes>
<NotificationScope>
<Code>a</Code>
</NotificationScope>
</Scopes>
</Notification>
</Notifications></Root>'
我希望能够计算每个通知的 NotificationScope 元素数。例如,我正在寻找类似的东西;
Notification Date Count
2012-08-16 2
2012-08-20 1
事实上,由于这些数据实际上是从数据库列中获得的,我真的只对返回那些具有任何通知日期且计数大于 1 的记录感兴趣。
到目前为止,我想出的只是以下内容,但这只是给了我一个计数;
declare @xmlvar XML;
set @xmlvar = (SELECT cast(@str AS XML))
;WITH XMLNAMESPACES('http://myurl.com/services/' AS p)
SELECT * FROM (
select @xmlvar.value('count(/p:Root/p:Notifications/p:Notification/p:Scopes/p:NotificationScope)', 'INT') AS 'NotificationScopeCount',
@xmlvar.value('count(/p:Root/p:Notifications/p:Notification/p:NotificationDate)', 'INT') AS 'NotificationDateCount'
) a WHERE NotificationScopeCount > NotificationDateCount
但理想情况下,我也希望能够获得相关的日期。如果这是一种可怕的处理方式,请原谅我,我以前在 SQL 中没有使用过多的 XML 数据类型。