>데이터 베이스 >MySQL 튜토리얼 >여러 열을 기반으로 MySQL 행을 열로 변환하는 방법은 무엇입니까?

여러 열을 기반으로 MySQL 행을 열로 변환하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-03 07:27:40193검색

How to Convert MySQL Rows to Columns Based on Multiple Columns?

여러 열을 기반으로 행을 열로 변환하는 MySQL 쿼리

소개:

동적으로 행을 열로 변환하는 것은 데이터 조작에서 일반적인 작업입니다. 이 기사에서는 MySQL 쿼리를 사용하여 단일 열 변환을 처리했던 이전 솔루션의 기능을 확장하는 솔루션을 살펴봅니다.

문제:

데이터와 해당 가격을 나타내는 여러 행이 있고 주문 및 항목별로 구성된 테이블입니다. 목표는 이 데이터를 각 주문이 열로 표시되고 각 항목이 행으로 표시되어 해당 가격이 표시되는 테이블로 변환하는 것입니다.

해결책:

이러한 다중 열 변환을 달성하기 위해 우리는 2단계 프로세스를 사용합니다.

1단계: 피벗 해제 데이터

UNION ALL을 사용하여 데이터 피벗을 해제하여 각 주문 및 항목 조합에 대해 여러 행을 생성하는 것으로 시작합니다. 이를 통해 다음 단계에서 데이터를 더 쉽게 조작할 수 있습니다.

SELECT id, CONCAT('order', `order`) col, data value
FROM tableA
UNION ALL
SELECT id, CONCAT('item', item) col, price value
FROM tableA;

2단계: 피벗되지 않은 데이터 피벗

데이터가 피벗 해제되면 피벗합니다. CASE 문과 함께 집계 함수를 사용하여 열로 다시 반환합니다. 피벗되지 않은 행을 ID별로 그룹화하고 해당 값을 적절한 열에 할당합니다.

SELECT
  id, 
  MAX(CASE WHEN col = 'order1' THEN value END) ORDER1,
  MAX(CASE WHEN col = 'order2' THEN value END) ORDER2,
  MAX(CASE WHEN col = 'order3' THEN value END) ORDER3,
  MAX(CASE WHEN col = 'item1' THEN value END) ITEM1,
  MAX(CASE WHEN col = 'item2' THEN value END) ITEM2,
  MAX(CASE WHEN col = 'item3' THEN value END) ITEM3
FROM
(
  SELECT id, CONCAT('order', `order`) col, data value
  FROM tableA
  UNION ALL
  SELECT id, CONCAT('item', item) col, price value
  FROM tableA
) d
GROUP BY id;

동적 쿼리 생성:

다양한 주문 수의 테이블을 처리하려면 및 항목을 사용하여 준비된 쿼리를 동적으로 생성할 수 있습니다. 명령문.

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN col = ''',
      col,
      ''' THEN value END) AS `', 
      col, '`')
  ) INTO @sql
FROM
(
  SELECT CONCAT('order', `order`) col
  FROM tableA
  UNION ALL
  SELECT CONCAT('item', `item`) col
  FROM tableA
)d;

SET @sql = CONCAT('SELECT id, ', @sql, ' 
                  FROM
                  (
                    SELECT id, CONCAT(''order'', `order`) col,  data value
                    FROM tableA
                    UNION ALL
                    SELECT id, CONCAT(''item'', item) col, price value
                    FROM tableA
                  ) d
                  GROUP BY id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

결과:

결과 테이블은 각 주문을 열로, 각 항목을 행으로 사용하여 데이터를 간결하게 표현합니다. 해당 가격입니다.

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

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