2014-07-16 5 views
0

샘플 데이터 :SQL 그룹 by 및 조합?

Serial | Name 
------------------------- 
    1 | aaaa 
    1 | bbbb 
    1 | cccc 
    2 | aaaa 
    3 | bbbb 
    3 | aaaa 
    3 | cccc 
    4 | bbbb 
    4 | cccc 

serial에 의해 I 그룹을 경우 나는 4 개 개의 그룹이있다. 모든 데이터를 그룹화 한 후 record count in group

repeat count | name in record count | repeat repeat count | 
----------------------------------------------------------| 
      1 |     aaaa |     1 | 
      2 |   bbbb,cccc |     1 | 
      3 |  aaaa,bbbb,cccc |     2 | 

에 의해

Serial | record count in group | name in group | 
---------------------------------------- 
    1 |     3 | aaaa,bbbb,cccc | 
    2 |     1 |   aaaa | 
    3 |     3 | aaaa,bbbb,cccc | 
    4 |     2 |  bbbb,cccc | 

및 그룹 , 난이 원하는 : (마지막 결과를 나의 예상)

난 다음 어떻게 달성 할 수 있습니까?

| Name | record count in group | Available Count | 
|------------------------------------------------| 
| aaaa |      3 |    2 | (there are 2 aaaa in 3 combinations) 
|------------------------------------------------| 
| aaaa |      1 |    1 | (there is 1 aaaa in 1 combination) 
|------------------------------------------------| 
| bbbb |      3 |    2 | (there is 2 bbb in 3 combinations) 
|------------------------------------------------| 
| bbbb |      2 |    1 | ... 
|------------------------------------------------| 
| cccc |      3 |    2 | 
|------------------------------------------------| 
| cccc |      2 |    1 | 
|------------------------------------------------| 

나는 다음과 같이 몇 가지 일을 시도 : SQL FIDDLE DEMO

SELECT Serial, COUNT(Serial) GroupCount, Name = 
    STUFF((SELECT ', ' + Name 
     FROM your_table b 
     WHERE b.Serial = a.Serial 
     FOR XML PATH('')), 1, 2, '') 
FROM your_table a 
GROUP BY Serial 

하지만 난 당신이 실제적인 것에 대해 잘 모르겠어요 내 예상 된 결과를

답변

3

를 찾기 위해 검색 쿼리를 작성해야 요구 사항이 있지만 원하는 내용 일 수 있습니다.

SELECT Name, cnt, COUNT(*) 
FROM 
(
    SELECT Serial, Name, 
     COUNT(*) OVER (PARTITION BY Serial) as cnt 
    FROM your_table 
) a 
GROUP BY Name, cnt 

일련 번호 당 행 수를 창 개수로 가져온 다음 그룹화합니다. Fiddle