0

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

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

4

1 回答 1

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
于 2012-08-22T13:48:56.820 回答