[SQL] 열을 동적으로 변환 행에 MySQL의 쿼리
SQL열을 동적으로 변환 행에 MySQL의 쿼리
많은 열이 같은 행에 필요한 동적으로 추가, 열을 행으로 변환 MYSQL 수 있습니다. 내 질문 피벗 테이블에 관련이있을 수 있다고 생각하지만 난 확신 그리고 난 다음 예제를 제공함으로써 이외의이 질문을 프레임하는 방법을 모르겠어요.
같이 두 테이블 A와 B, 주어
표 A
+--+-----+----+
|id|order|data|
+--+-----+----+
|1 |1 |P |
+--+-----+----+
|2 |2 |Q |
+--+-----+----+
|2 |1 |R |
+--+-----+----+
|1 |2 |S |
+--+-----+----+
나는 쿼리를 작성하고자 그 다음과 같습니다 :
표 결과
+--+-----+-----+
|id|data1|data2|
+--+-----+-----+
|1 |P |S |
+--+-----+-----+
|2 |R |Q |
+--+-----+-----+
기본적으로 나는 결과 테이블의 컬럼에 테이블 B의 각 행을 켜려고합니다. 새로운 엔트리는 ID = 1의 표 B에 첨가하고 있었다면, 그 다음 I는 자동적으로 결과 테이블이 추가 데이터 포인트를 수용하기 위해 하나 개의 컬럼에서 연장 할.
해결법
-
==============================
1.당신은 시뮬레이션 피벗에 GROUP BY 및 MAX를 사용할 수 있습니다. IF 문 MySQL은 또한 지원합니다.
당신은 시뮬레이션 피벗에 GROUP BY 및 MAX를 사용할 수 있습니다. IF 문 MySQL은 또한 지원합니다.
SELECT ID, MAX(IF(`order` = 1, data, NULL)) data1, MAX(IF(`order` = 2, data, NULL)) data2 FROM TableA GROUP BY ID
당신이 순서의 여러 값이있는 경우, 동적 SQL은 쿼리를 수정해야하지 않도록 적절한 더있을 수 있습니다 :
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(`order` = ', `order`, ',data,NULL)) AS data', `order`) ) INTO @sql FROM TableName; SET @sql = CONCAT('SELECT ID, ', @sql, ' FROM TableName GROUP BY ID'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
두 쿼리의 출력 :
╔════╦═══════╦═══════╗ ║ ID ║ DATA1 ║ DATA2 ║ ╠════╬═══════╬═══════╣ ║ 1 ║ P ║ S ║ ║ 2 ║ R ║ Q ║ ╚════╩═══════╩═══════╝
-
==============================
2.당신은 PIVOT을 시뮬레이션 MAX와 GROUP BY를 사용해야합니다 :
당신은 PIVOT을 시뮬레이션 MAX와 GROUP BY를 사용해야합니다 :
SELECT Id, MAX(CASE WHEN Order = 1 THEN data END) data1, MAX(CASE WHEN Order = 2 THEN data END) data2 FROM TableA GROUP BY Id
그리고 여기에 SQL 바이올린입니다.
from https://stackoverflow.com/questions/14834290/mysql-query-to-dynamically-convert-rows-to-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버에서 날짜로 변환 VARCHAR (0) | 2020.03.20 |
---|---|
[SQL] 어떻게 자바 준비된 문장 삽입에 대한 테이블 이름 변수를 사용하여 [중복] (0) | 2020.03.20 |
[SQL] 특정 조건에서 방지 INSERT에 MySQL의 트리거 (0) | 2020.03.20 |
[SQL] 결과를 검색 할 때 어떻게 모호한 열 이름을 해결하기 위해? (0) | 2020.03.20 |
[SQL] 당신은 어떻게 Oracle 데이터베이스에 임시 테이블을 만들려면 어떻게해야합니까? (0) | 2020.03.20 |