>데이터 베이스 >MySQL 튜토리얼 >행 값에서 동적 열 이름을 사용하여 MySQL 테이블을 어떻게 피벗할 수 있습니까?

행 값에서 동적 열 이름을 사용하여 MySQL 테이블을 어떻게 피벗할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-13 20:01:43581검색

How Can I Pivot a MySQL Table with Dynamic Column Names from Row Values?

MySQL 동적 행 값을 열 이름으로 사용

MySQL에는 동적 행 값을 열 이름으로 갖고 피벗 테이블 형식으로 표시되는 레거시 테이블 데이터에 대한 기본 피벗 기능이 없습니다. 그러나 GROUP_CONCAT()을 사용하여 준비된 명령문은 원하는 결과를 얻는 데 도움이 될 수 있습니다.

샘플 테이블:

<code class="language-sql">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</code>

목표 출력:

<code>id    timezone       language    country  something
---------------------------------------------------
0     Europe/London  en          45       x
1     Europe/Paris   fr          46</code>

다음과 같이 준비된 명령문을 구성합니다.

<code class="language-sql">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;</code>

이 쿼리는 SELECT을 사용하여 동일한 LEFT JOIN 값이 있는 행을 결합하고 고유한 id 값에 해당하는 값을 추출하는 name 문을 동적으로 생성합니다. 그런 다음 id을 눌러 결과를 그룹화하여 원하는 피벗 테이블 형식을 생성하세요.

MySQL에는 기본 피벗 기능이 없지만 이 방법은 구조화된 방식으로 동적 열 이름이 있는 레거시 테이블에서 데이터를 검색하는 방법을 제공합니다.

위 내용은 행 값에서 동적 열 이름을 사용하여 MySQL 테이블을 어떻게 피벗할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.