2012-08-22 4 views
0

두 개의 열이있는 표가 있습니다. 외래 키 식별자 및 XML 열. XML 열에는 외부 객체에 대한 세부 정보가 들어 있습니다. 예를 들어 내 테이블에는 다음이 포함 된 경우 :SQL Server : 여러 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 

하지만 어디 근처 유용는. (발견 한 모든 수에 대해 고유 한 행을 표시합니다).

답변

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 
관련 문제