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

단일 열의 동적 열 이름을 사용하여 MySQL에서 데이터를 피벗하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-13 19:57:44230검색

How to Pivot Data in MySQL with Dynamic Column Names from a Single Column?

열 이름 피벗으로 사용되는 MySQL 동적 행 값

질문:

이전 MySQL 테이블에서는 데이터에 "name"이라는 단일 열에 고유한 값으로 저장된 변경 가능한 열 이름이 있었습니다. 이 데이터를 피벗 형식으로 변환하는 쿼리가 필요합니다. 여기서 이름 값은 열 헤더가 되고 해당 필드 값은 해당 헤더 아래의 값이 됩니다.

해결책:

피벗에 대한 기본 지원이 부족함에도 불구하고 MySQL은 동적 SQL 및 GROUP_CONCAT() 함수를 통해 이를 달성할 수 있습니다.

MySQL 쿼리:

<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>

지침:

  1. 하위 쿼리는 다양한 이름 값을 선택하고 UNION 쿼리를 생성하여 피벗에 필요한 다양한 열 이름을 나타냅니다.
  2. CONCAT() 함수는 SQL 문자열을 연결하고 GROUP_CONCAT을 사용하여 열 이름과 해당 값을 동적으로 연결합니다.
  3. 생성된 SQL 문자열을 사용하여 stmt 임시 저장 프로시저를 생성합니다.
  4. EXECUTE stmt 문은 동적 SQL 쿼리를 실행하여 예상대로 데이터를 피벗합니다.

결과:

쿼리는 이름 값을 열 헤더로, 필드 값을 해당 값으로 사용하여 피벗된 결과 집합을 반환합니다.

id timezone language country something
0 Europe/London en 45 x
1 Europe/Paris fr 46 NULL

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

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