[SQL] 열 이름으로 다른 값으로 열을 동적 행 값을 선택 MYSQL
SQL열 이름으로 다른 값으로 열을 동적 행 값을 선택 MYSQL
나는 (활성 아직 사용) 사용자 정보의 유산 테이블을하고 난의 구조를 변경할 수 없습니다 -
id name value
------------------------------
0 timezone Europe/London
0 language en
0 country 45
0 something x
1 timezone Europe/Paris
1 language fr
1 country 46
등 시간대 / 언어 / 국가들이 변수가 될 수있는, 이름의 예 / 해당 열의 행에서 고유 이외의 유한 목록이 없습니다
나는 반환 MySQL의 호환 SQL 쿼리가 필요합니다 -
id timezone language country something
---------------------------------------------------
0 Europe/London en 45 x
1 Europe/Paris fr 46
나는 MySQL은, 및 유사하여 피벗 테이블 기능을 해킹 주위 유래에 대한 다양한 답변을 통해 검토 한하지만 그들 중 누구도 같은 테이블의 열에서 고유 한 행 값에서 변수 열 이름 별칭을 사용하여이 경우에 맞게 보이지 않는다. 그들은 모두 사전에 사과 흐림 약간되기 시작하고, 그래서 나는 거의 잠을 가지고 있지만.
내가 찾을 수있는 가장 가까운, 그리고 / 또는 여러 개의 하위 이름 열에서 가능한 모든 / 고유 값을받을 것이다 준비된 문 https://stackoverflow.com/a/986088/830171을 사용할 때 사용 사례 쿼리를 작성하는 것입니다 SELECT 또는 동일한 테이블 쿼리에 가입하세요.
내가 생각할 수있는 대안이 해당 사용자 ID에 대한 모든 행을 얻을 수와 대한 루프에서 응용 프로그램 자체를 처리하거나, 유한 한 금액과 사용 하위 SELECT들에 이름을 제한하려고 시도합니다 / 조인. 그러나 그 두 번째 옵션은 새 이름 난이 쿼리를 다시 방문해야 할 것 추가되는 경우 적합하지 않습니다.
말해 나는 분명 뭔가를 놓친하세요
해결법
-
==============================
1.다른 RDBMS MySQL은 디자인에 의해 이런 종류의 작업을 선회에 대한 기본 지원을 (개발자가 더 오히려 데이터베이스보다, 프리젠 테이션에 적합한 것 응용 프로그램의 계층을 느낄 수)이없는 달리.
다른 RDBMS MySQL은 디자인에 의해 이런 종류의 작업을 선회에 대한 기본 지원을 (개발자가 더 오히려 데이터베이스보다, 프리젠 테이션에 적합한 것 응용 프로그램의 계층을 느낄 수)이없는 달리.
당신이 절대적으로 MySQL을 내 같은 조작을 perfom해야하는 경우 준비된 문을 작성하는 것은 이동-있지만 오히려 CASE와 장난보다, 나는 아마의 MySQL의 GROUP_CONCAT () 함수를 사용하려는 방법입니다 :
SELECT CONCAT( 'SELECT `table`.id', GROUP_CONCAT(' , `t_', REPLACE(name, '`', '``'), '`.value AS `', REPLACE(name, '`', '``'), '`' SEPARATOR ''), ' FROM `table` ', GROUP_CONCAT(' LEFT JOIN `table` AS `t_', REPLACE(name, '`', '``'), '` ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.id AND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name) SEPARATOR ''), ' GROUP BY `table`.id' ) INTO @qry FROM (SELECT DISTINCT name FROM `table`) t; PREPARE stmt FROM @qry; EXECUTE stmt;
sqlfiddle에를 참조하십시오.
GROUP_CONCAT의 결과 ()가 group_concat_max_len 변수에 의해 제한됩니다 (1024 바이트의 기본 : 당신은 몇 가지 매우 긴 이름 값을하지 않는 한 여기에 관련 될 가능성).
from https://stackoverflow.com/questions/10925445/mysql-select-dynamic-row-values-as-column-names-another-column-as-value by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] T-SQL 동적 피벗 (0) | 2020.03.20 |
---|---|
[SQL] 카티 제품을 할 수있는 좋은 LINQ의 방법이 있습니까? (0) | 2020.03.20 |
[SQL] 정확히 테이블 이름 주위의 인용 부호는 무엇을해야합니까? (0) | 2020.03.19 |
[SQL] rewriteBatchedStatements와 MySQL과 JDBC = TRUE (0) | 2020.03.19 |
[SQL] MySQL은 공백으로 열 이름을 선택하는 방법 (0) | 2020.03.19 |