SQL Server:从多个XML行获取唯一计数?

时间:2012-08-22 13:43:43

标签: sql sql-server xml sqlxml

我有一个有两列的表。外键标识符和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

但它没有哪里有用。 (它为它找到的每个计数显示一个唯一的行。)

1 个答案:

答案 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