[SQL] MySQL의에서 선택 동적 열
SQLMySQL의에서 선택 동적 열
그것은 다음과 같은 테이블을 통과 할 수 있습니다 :
mysql> select * from `stackoverflow`.`Results`; +--------------+---------+-------------+--------+ | ID | TYPE | CRITERIA_ID | RESULT | +--------------+---------+-------------+--------+ | 1 | car | env | 1 | | 2 | car | gas | | | 3 | car | age | | | 4 | bike | env | 1 | | 5 | bike | gas | | | 6 | bike | age | 1 | | 7 | bus | env | 1 | | 8 | bus | gas | 1 | | 9 | bus | age | 1 | +--------------+---------+-------------+--------+ 9 rows in set (0.00 sec)
이 속으로 :
+------+-----+-----+-----+ | TYPE | env | gas | age | +------+-----+-----+-----+ | car | 1 | | | | bike | 1 | | 1 | | bus | 1 | 1 | 1 | +------+-----+-----+-----+
목표는 모든 CRITERIA_IDs를 선택하고 열로 사용하는 것입니다. 행으로 내가 모든 유형을 사용하는 것을 좋아합니다.
그러나보기 또는 떨어지게로 결합하는 방법. 이 같은?
당신은 데이터를 재생하고자합니다. 이 테이블을 생성하는 스크립트입니다 :
CREATE SCHEMA `stackoverflow`;
CREATE TABLE `stackoverflow`.`Results` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`TYPE` varchar(50) NOT NULL,
`CRITERIA_ID` varchar(5) NOT NULL,
`RESULT` bit(1) NOT NULL,
PRIMARY KEY (`ID`)
)
ENGINE=InnoDB;
INSERT INTO `stackoverflow`.`Results`
(
`ID`,
`TYPE`,
`CRITERIA_ID`,
`RESULT`
)
VALUES
( 1, "car", env, true ),
( 2, "car", gas, false ),
( 3, "car", age, false ),
( 4, "bike", env, true ),
( 5, "bike", gas, false ),
( 6, "bike", age, true ),
( 7, "bus", env, true ),
( 8, "bus", gas, true ),
( 9, "bus", age, true );
해결법
-
==============================
1.불행하게도 MySQL은 기본적으로 당신이하려고하는 어떤 피벗 기능이 없습니다. 당신은 CASE 문으로 집계 함수를 사용해야합니다 그래서 :
불행하게도 MySQL은 기본적으로 당신이하려고하는 어떤 피벗 기능이 없습니다. 당신은 CASE 문으로 집계 함수를 사용해야합니다 그래서 :
SELECT type, sum(case when criteria_id = 'env' then result end) env, sum(case when criteria_id = 'gas' then result end) gas, sum(case when criteria_id = 'age' then result end) age FROM results group by type
데모와 SQL 바이올린을 참조하십시오
당신은 당신이 시간을 앞서 트랜스에 열을 모르는 의미,이 동적으로 수행하려는 경우 지금, 당신은 다음 문서를 검토해야합니다 :
동적 피벗 테이블 (컬럼에 로우 변환)
코드는 다음과 같을 것이다 :
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'SUM(IF(CRITERIA_ID = ''', CRITERIA_ID, ''', RESULT, NULL)) AS ', CRITERIA_ID ) ) INTO @sql FROM Results; SET @sql = CONCAT('SELECT type, ', @sql, ' FROM Results GROUP BY type'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
데모와 SQL 바이올린을 참조하십시오
from https://stackoverflow.com/questions/11899647/select-dynamic-columns-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] , 허용 널 (null)을 하나 개의 테이블에있는 모든 항목을 선택하고 다른 테이블과 조인 (0) | 2020.07.12 |
---|---|
[SQL] 여러 삽입 SQL 오라클 (0) | 2020.07.12 |
[SQL] SQL 서버 2008 크로스 탭 쿼리 (0) | 2020.07.12 |
[SQL] mysql을 - 열 성능 대 만들기 행 (0) | 2020.07.11 |
[SQL] 테이블에 계층 적 데이터의 모든 자식 노드를 계산 (0) | 2020.07.11 |