我有一個帶有XML類型列的表。該列包含可能在記錄之間不同的屬性的動態列表。通過動態列表的T-SQL GROUP BY
我想通過這些屬性GROUP BY COUNT,而不必單獨通過每個屬性的表。
例如,一條記錄可能具有屬性A,B和C,另一條記錄可能有B,C,D,當我執行GROUP BY COUNT時,我會得到A = 1,B = 2,C = 2和D = 1。
有沒有簡單的方法來做到這一點?
編輯在回答安德魯answer:
因爲我的這個結構的認識是膚淺的,充其量我與它擺弄得到它做我想做的。在我的實際代碼中,我需要按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
作爲一個側面說明:有沒有什麼辦法可以進一步減少呢?
這是一個旁註。 – user472875 2012-04-25 19:17:55
您可以將WHERE條件移至WITH查詢,也可以將其刪除幾毫秒。 – Andrew 2012-04-25 21:59:36