> 데이터 베이스 > MySQL 튜토리얼 > 행 값에서 동적 열 이름을 사용하여 MySQL 테이블을 피벗하는 방법은 무엇입니까?

행 값에서 동적 열 이름을 사용하여 MySQL 테이블을 피벗하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-13 19:46:48
원래의
364명이 탐색했습니다.

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

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

질문:

가변 열 이름이 있는 이전 테이블을 고정 열 이름이 있는 테이블로 변환하는 MySQL 쿼리를 작성하는 방법은 무엇입니까? 여기서 특정 열의 각 고유 행 값은 열 이름이 됩니다.

배경:

다음 구조의 테이블을 생각해 보세요.

<code>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>
로그인 후 복사

MySQL은 기본 피벗 작업을 지원하지 않으므로 해결 방법을 찾아야 합니다.

해결책:

  • GROUP_CONCAT() 함수를 사용하면 원하는 테이블 형식을 생성하는 쿼리를 동적으로 생성할 수 있습니다.
  • 첫 번째 쿼리는 GROUP_CONCAT()을 사용하여 최종 쿼리를 작성하는 문자열을 준비합니다.
  • 두 번째 쿼리는 PREPAREEXECUTE을 사용하여 동적으로 생성된 쿼리를 실행합니다.

쿼리:

<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>
로그인 후 복사

참고:

  • GROUP_CONCAT() 결과 길이는 group_concat_max_len 변수에 의해 제한됩니다(기본값은 1024바이트).
  • 또는 CASE WHEN 또는 여러 하위 선택/조인이 포함된 준비된 문을 사용할 수 있지만 이를 위해서는 고유한 열 값을 수동으로 처리해야 합니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿