문자열을 rows로 변환하는 질문이 있어서 해당 건에 대한 처리 내역 입니다.

조건 

다음과 같은 Table가 있을 경우 


id 

name 

1

사과 

배 

사과,포도 


다음과 같은 결과를 도출하기를 원한다.


name

count 

배 

1

사과 

포도 


해당 건을 처리 하기 위해서는 사과,포도 라는 문자열을 2개의 ROW 처럼 인식 하도록 수정 해야 한다.


처리 결과 : http://sqlfiddle.com/#!2/04a0f/2


내역 설명 

-- 테이블 & 데이터 설정
CREATE TABLE tablename (
  id INT,
  name VARCHAR(20));

INSERT INTO tablename VALUES
(1, '사과'),
(2, '배'), 
(3, '사과,포도');

-- 최대 6개까지 처리 가능 만약 더 필요 하다면 데이터 값을 추가 해야함
CREATE TABLE numbers (
  n INT PRIMARY KEY);

INSERT INTO numbers VALUES (1),(2),(3),(4),(5),(6);

-- number와 join 하여 , 기준의 문자를 여러 row 처럼 인식하도록 처리
select a.name, count(1) from (
SELECT
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) name
FROM
  numbers INNER JOIN tablename
  ON CHAR_LENGTH(tablename.name)
     -CHAR_LENGTH(REPLACE(tablename.name, ',', ''))>=numbers.n-1
  ) a group by a.name


사실 참고 SQL을 가지고 살짝만 수정한 것이다.


질문 원본 : https://www.facebook.com/groups/codingeverybody/1025201834187019/?notif_t=group_comment_reply


참조 내역 : http://stackoverflow.com/questions/17942508/sql-split-values-to-multiple-rows

Posted by lahuman