2013-12-10 1 views
0

SQL은 이것을 만들 수 있습니까?SQL GROUP_CONCAT (편집 문구 포함)

Before       After 
+++++++++++++++++  +++++++++++++++++++++ 
+ ID | ID2 +  + ID | ID2  + 
+++++++++++++++++  +++++++++++++++++++++ 
+ 1 | A  +  + 1 | A-1,B-2,C-1 + 
+ 1 | B  +  + 2 | A-1,B-2  + 
+ 2 | A  +  + 3 | C-1   + 
+ 3 | C  +  +++++++++++++++++++++ 
+ 1 | B  + 
+ 2 | B  + 
+ 1 |   + 
+ 2 | B  + 
+ 2 | C  + 
+++++++++++++++++
+4

에 오신 것을 환영하세요! 나는 당신이'group_concat'을 참조 했으므로 당신이 MySQL을 언급하고있는 것으로 추측하고 있지만 적절한 태그 (Oracle, SQL Server, MySQL 등)를 추가하여 목표로 삼고있는 RDBMS를 지정하십시오. 보편적으로 지원되지 않는 언어 나 제품 기능을 이용하는 대답이있을 수 있습니다. 또한 특정 RDBMS로 태그를 달아서 질문에 답하는 것이 더 적합한 사람들로부터주의를받을 수 있습니다. – Taryn

답변

2

당신은 당신이 사용하고있는 데이터베이스를 지정하지 않았습니다하지만이 대답은 당신이 MySQL을 사용하고 있다고 가정 있도록 MySQL의 GROUP_CONCAT 기능을 참조.

  1. ID/ID2 조합의 수를 생성하고 함께 그 값을 연결 :

    당신이이 일을 할 것으로 보인다. ID2

  2. 그룹들 쌍과 나는 각각 id/id2 콤보의 수를 얻을 수있을 것이다 걸릴 것 ID

첫 번째 단계에 따라 단일 문자열로 계산 :

select id, 
    id2, 
    count(*) Total 
from yourtable 
group by id, id2 

Demo을 참조하십시오. 이 값이 있으면, 당신은 최종 결과를 만들 수 group_concat 기능과 concat 기능을 모두 사용할 수 있습니다

select 
    id, 
    group_concat(concat(ID2, '-', Total) ORDER BY ID2 SEPARATOR ',') ID2 
from 
(
    select id, 
    id2, 
    count(*) Total 
    from yourtable 
    group by id, id2 
) d 
group by id; 

은 스택 오버플로 SQL Fiddle with Demo

+0

답장을 보내 주셔서 감사합니다. 예, MySQL을 사용하고 있습니다. 코딩을 시도했지만 빈 데이터가 '- '으로 표시됩니다. 그것을 만드는 방법? 만약 내가 빈 데이터를 무시합니다. – user3085204

+0

@ user3085204 이런 뜻이야? - http://sqlfiddle.com/#!2/ee089/3 – Taryn

+0

네, 맞습니다. 정말 고맙습니다 – user3085204