데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
안녕하세요
1,2 항목이 같고 3항목만 틀릴때 1,2중복제거와 3을 한행으로 하고 싶은데 도움좀 부탁드립니다 ㅠㅠ
출력 결과의 예시는
이름 성별 취미
홍길동 남 축구,야구
홍길동 남 농구
해당 결과를
이름 성별 취미
홍길동 남 축구, 야구, 농구
이름 성별이 같고 취미가 다를때 취미의 행을 1열에 콤마로 구분하여 옮길 수 있는 방법좀 알려주시면 정말 감사하겠습니다 ㅠㅠ
Comment 1
-
건우아빠
2016.12.21 09:49
구분자로 되어 있는걸 열->행으로 하나씩 분리 -- 사용자함수 만들어 사용하시면 좋을듯...
이걸 중복제거하고 이걸 다시 행값을 열로 합하는 방법으로 하시면 방법으로...
with numT
as(
select 1 num union all
select 2 num union all
select 3 num union all
select 4 num -- / 배열 4개까지만 지원 한답니다...
-- 문제는 소수점이 있는 수치에서는 한번더 replace 사용해야함..
) ,
res as
(
select '홍길동' 이름, '남' 성별 ,'축구,야구' 취미 union all
select '홍길동' , '남' ,'농구'
) ,
result as --- http://www.sqler.com/140487
(
select distinct a.이름
, a.성별
, parsename(replace(a.취미,',','.') ,b.num ) 취미
from res a cross join numT b
where parsename(replace(a.취미,',','.') ,b.num ) is not null
)
SELECT DISTINCT 이름 , 성별 --- http://www.sqler.com/141578 1) 행값을 구분자로 합하여 열로 표현
, STUFF(
(SELECT ',' + 취미 AS [text()] FROM result b WHERE b.이름 = a.이름 and b.성별 = a.성별 FOR XML PATH('')) , 1, 1, '' ) AS 취미
FROM result a
ORDER BY 1