0

2列のテーブルがあります。外部キー識別子と 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 に答える