>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 행을 열로 동적으로 피벗하는 방법은 무엇입니까?

MySQL에서 행을 열로 동적으로 피벗하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-14 10:00:45265검색

How to Dynamically Pivot Rows into Columns in MySQL?

MySQL 동적 행 및 열 변환 기술

MySQL에서는 다양한 기술을 사용하여 행을 열로 동적으로 변환하는 동시에 새 행을 수용하기 위해 열을 동적으로 추가할 수 있습니다.

GROUP BY 및 MAX 함수 사용

한 가지 방법은 GROUP BY 및 MAX 함수를 활용하는 것입니다. 예를 들어 다음과 같은 행과 열이 있는 테이블을 생각해 보세요.

<code>表A

+--+-----+----+
| id | order | data |
+--+-----+----+
| 1  | 1    | P    |
| 2  | 2    | Q    |
| 2  | 1    | R    |
| 1  | 2    | S    |
+--+-----+----+</code>

이러한 행을 열로 변환하려면 다음 쿼리를 사용할 수 있습니다.

<code>SELECT  ID,
        MAX(IF(`order` = 1, data, NULL)) data1,
        MAX(IF(`order` = 2, data, NULL)) data2
FROM    TableA
GROUP   BY ID</code>

이 쿼리는 ID 열을 기준으로 행을 그룹화하고 MAX 및 IF 문을 사용하여 각 주문 열에 해당하는 값을 반환합니다. 결과는 다음과 같습니다.

<code>+--+-----+-----+
| id | data1 | data2 |
+--+-----+-----+
| 1  | P    | S    |
| 2  | R    | Q    |
+--+-----+-----+</code>

동적 SQL 사용

주문 열에 여러 값이 있는 경우 동적 SQL을 사용하는 것이 더 적합할 수 있습니다. 이를 통해 쿼리를 동적으로 생성하고 다양한 주문 수량을 수용할 수 있습니다.

<code>SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(`order` = ', `order`, ',data,NULL)) AS data', `order`)
  ) INTO @sql
FROM TableName;

SET @sql = CONCAT('SELECT  ID, ', @sql, ' 
                  FROM    TableName
                  GROUP   BY ID');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;</code>

이 접근 방식은 다양한 순서 값을 기반으로 쿼리를 동적으로 생성함으로써 유연성을 제공하고 결과 테이블이 데이터의 모든 변경 사항에 자동으로 적응하도록 보장합니다.

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

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