我有一个有两列的表。外键标识符和XML列。 XML列包含有关外部对象的详细信息。例如,如果我的表包含以下内容:
1 | <details><software name="iTunes" /></details>
1 | <details><software name="iPhoto" /><software name="iTunes" /></details>
2 | <details><software name="iTunes" /><software name="MSSQL" /></details>
2 | <details><software name="Visual Studios" /></details>
如何运行查询,让每个实体获得“软件”的唯一数量?例如,预期的结果将是:
1 | 2
2 | 3
其中第1列是标识符,第2列是唯一总和。
我能得到的最接近的是以下查询:
SELECT
DISTINCT
id,
details.value('count(/details/software)', 'int') AS SoftwareCount
FROM
detailsTable
但它没有哪里有用。 (它为它找到的每个计数显示一个唯一的行。)
答案 0 :(得分:2)
select
id,
COUNT(distinct( x.sw.value('@name','varchar(50)')))
from
detailstable
cross apply
detailstable.details.nodes('/details/software') x(sw)
group by id