2017-10-02 5 views
0

가입 SQL에서 두 개의 행을 병합은 다음과 같습니다쿼리에 가입 내 문

select distinct A.id as plan_id, A.start_date, A.end_date, C.title 
from cp_plan A left outer join cp_plan_zone_map B 
on A.id = B.plan_id left outer join cp_zone C 
on B.zone_id = C.id where A.status = 'in-planning' 

이 나에게 다음과 같은 결과 제공 : 내 계획 아이디 이후

enter image description here

을, 날짜와 종료 날짜를 시작합니다 모두 같아요. 원하는 제목은 다음과 같이 제목을 병합하는 것입니다.

enter image description here

어떻게해야합니까?

SELECT 
    A.id AS plan_id, 
    A.start_date, 
    A.end_date, 
    GROUP_CONCAT(C.title, '-') AS title 
FROM cp_plan A 
LEFT JOIN cp_plan_zone_map B 
    ON A.id = B.plan_id 
LEFT JOIN cp_zone C 
    ON B.zone_id = C.id 
WHERE 
    A.status = 'in-planning' 
GROUP BY 
    A.id, 
    A.start_date, 
    A.end_date; 
+1

당신이 시도해 봤어을'pivot' ? [확인] (https://stackoverflow.com/questions/15931607/convert-rows-to-column-using-pivot-in-sql-server) – dwij

+0

여기에도 멋진 설명이 있습니다. 그러나, 나는 GROUP_CONCAT() func을 구현하는 것이 더 쉽지만 제안을 주셔서 감사합니다! –

답변

1

plan_id, start_date 이상 집계 및 end_date 및 하이픈을 생성하는 GROUP_CONCAT를 사용하는 타이틀의 목록을 분리

SELECT A.id AS plan_id, 
     A.start_date, 
     A.end_date, 
     group_concat(C.title, '-') AS title 
FROM cp_plan A 
LEFT OUTER JOIN cp_plan_zone_map B ON A.id = B.plan_id 
LEFT OUTER JOIN cp_zone C ON B.zone_id = C.id 
WHERE A.status = 'in-planning' 
GROUP BY plan_id 
0

는 대답 here 찾았 :