我有一个带有 XML 类型列的表。此列包含记录之间可能不同的属性的动态列表。
我正在尝试对这些属性进行 GROUP BY COUNT,而不必为每个属性分别浏览表格。
例如,一条记录可能有属性 A、B 和 C,而另一条记录可能有 B、C、D,然后,当我执行 GROUP BY COUNT 时,我会得到 A = 1、B = 2、C = 2 和 D = 1 .
有没有直接的方法可以做到这一点?
编辑回复安德鲁的回答:
因为我对这个结构的了解充其量是肤浅的,所以我不得不摆弄它来让它做我想做的事。在我的实际代码中,我需要按 TimeRange 进行分组,并且只根据它们的名称选择一些属性。我在下面粘贴实际查询:
WITH attributes AS (
SELECT
Timestamp,
N.a.value('@name[1]', 'nvarchar(max)') AS AttributeName,
N.a.value('(.)[1]', 'nvarchar(max)') AS AttributeValue
FROM MyTable
CROSS APPLY AttributesXml.nodes('/Attributes/Attribute') AS N(a)
)
SELECT Datepart(dy, Timestamp), AttributeValue, COUNT(AttributeValue)
FROM attributes
WHERE AttributeName IN ('AttributeA', 'AttributeB')
GROUP BY Datepart(dy, Timestamp), AttributeValue
附带说明:有没有办法进一步减少这种情况?