일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- perl string
- sqlplus
- patch
- fdisk
- prompt
- Linux
- perl one-liner
- oracle
- memory
- dba
- RHEL4
- PERL
- 오라클
- Network
- solaris network
- 연산자
- rac
- Unix
- SQL
- perl + 정규표현식
- command & perl
- solaris
- mariaDB
- php5
- MySQL
- grid
- oracle install
- bash
- cygwin
- Oracle RAC
Archives
- Today
- Total
DATA 전문가로 가는 길
[SQL] MariaDB/Mysql 구분자(콤마, 파이프라인 등등)를 기준으로 열(row) 변환 본문
Data Architecture/SQL Query
[SQL] MariaDB/Mysql 구분자(콤마, 파이프라인 등등)를 기준으로 열(row) 변환
EstenPark 2017. 2. 16. 16:04MaraiDB 또는 Mysql에서 구분자로 넘어온 값을 다시 열로 변환(테이블)하는 방법을 해보려고 합니다. 쿼리를 작성할 때 100개 미만의 데이터 셋은 where절에 IN(..)절을 이용해서 전달하면 되지만, 1,000개, 10,000개 많은 양의 데이터를 조작하고자 할 때는 불편하게 됩니다. 또는 XML, CSV 파일의 행을 열로 바꾸고 행의 데이터를 열로 보고자 할 때 유용합니다.
1. 구분자 자르기를 이용해서 열로 변경하는 쿼리
/* 1. 사용자 변수 */ SET @IN_DELIMITER = '|'; SET @IN_DATA = '10|20|30||40|50||70|80|||90'; /* 구분자를 기준으로 로우(ROW) 데이터 생성 쿼리*/ SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(A.DATA, @IN_DELIMITER, B.RN), @IN_DELIMITER, -1)) AS ROW_DATA FROM (SELECT CASE WHEN CONVERT((LENGTH(A.DATA) - LENGTH(REPLACE(A.DATA, @IN_DELIMITER, ''))) / LENGTH(','), UNSIGNED) > 0 THEN CONVERT((LENGTH(A.DATA) - LENGTH(REPLACE(A.DATA, @IN_DELIMITER, ''))) / LENGTH(',') + 1, UNSIGNED) ELSE 0 END AS DELIMITER_CNT ,A.DATA FROM (SELECT @IN_DATA AS DATA) A) A /* [조건] 데이터 입력 */ INNER JOIN (SELECT CAST(seq AS INT) as RN FROM seq_1_to_1000) B ON (B.RN <= A.DELIMITER_CNT) ;
2. 데이터 결과
3. 열(Row) -> 행(Column) 변경(구분자)
SELECT GROUP_CONCAT(A.SEQ) AS DATA FROM seq_1_to_10 A ;
'Data Architecture > SQL Query' 카테고리의 다른 글
[SQL] MariaDB/MySQL MAX/MIN 최고값 최저값의 세부 속성 데이터 활용하기(최고일시, 최저일시 등) (0) | 2017.03.24 |
---|---|
[SQL] Oracle 필수 스크립트 모음(딕셔너리, SQL 문법, 성능 분석) (0) | 2017.03.13 |
[SQL] Oracle Merge(Insert, Update, Delete) 한번에 작업 하는 방법 (1) | 2016.12.22 |
[SQL] Oracle 자동 테이블 레이아웃 만들기(Tablelayout, 테이블 정의서) (0) | 2016.06.03 |
[SQL] Oracle 구분자 행, 열, 분리, 자르기(REGEXP_SUBSTR, REGEXP_COUNT) (6) | 2016.06.02 |
Comments