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

여러 기준에 따라 MySQL에서 행을 열로 동적으로 피벗하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-05 12:44:42980검색

How to Dynamically Pivot Rows to Columns in MySQL Based on Multiple Criteria?

MySQL에서 여러 기준을 사용하여 행을 열로 동적으로 변환

질문:

어떻게 할 수 있나요? 두 가지 기준에 따라 MySQL에서 행을 열로 동적으로 변환합니다. 열?

컨텍스트:

테이블에는 각 행에 대해 "data" 및 "price"라는 이름의 열이 있는 여러 행이 포함되어 있습니다. 목표는 데이터와 가격의 고유한 조합을 나타내는 열과 해당 행 데이터를 포함하는 각 셀이 있는 새 테이블로 테이블을 변환하는 것입니다.

해결책:

여러 기준에 따라 행을 열로 동적으로 변환하기 위해 MySQL 기능과 동적 기능을 조합하여 사용할 수 있습니다. SQL.

  1. 데이터 피벗 해제:

먼저 원본 테이블의 피벗을 해제하여 각각의 고유한 데이터 조합에 대해 여러 행이 포함된 새 테이블을 생성합니다. 및 가격.

SELECT id, CONCAT('order', `order`) AS col, data AS value
FROM tableA
UNION ALL
SELECT id, CONCAT('item', item) AS col, price AS value
FROM tableA;
  1. 피벗 데이터:

다음으로 CASE 문을 사용하여 피벗되지 않은 데이터를 다시 열로 집계합니다.

SELECT id, 
MAX(CASE WHEN col = 'order1' THEN value END) AS order1,
MAX(CASE WHEN col = 'order2' THEN value END) AS order2,
MAX(CASE WHEN col = 'order3' THEN value END) AS order3,
MAX(CASE WHEN col = 'item1' THEN value END) AS item1,
MAX(CASE WHEN col = 'item2' THEN value END) AS item2,
MAX(CASE WHEN col = 'item3' THEN value END) AS item3
FROM (
  SELECT id, CONCAT('order', `order`) AS col, data AS value
  FROM tableA
  UNION ALL
  SELECT id, CONCAT('item', item) AS col, price AS value
  FROM tableA
) d
GROUP BY id;
  1. 동적 SQL:

쿼리를 동적으로 만들기 위해 준비된 문을 사용하고 원본 테이블의 고유 열을 기반으로 하는 CASE 문입니다.

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`) AS col
  FROM tableA
  UNION ALL
  SELECT CONCAT('item', `item`) AS col
  FROM tableA
) d;

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

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

이 동적 쿼리는 임의 개수의 고유 기준을 처리하고 원하는 변환 테이블을 생성합니다.

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

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