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

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

Linda Hamilton
Linda Hamilton원래의
2025-01-20 05:41:081121검색

How to Unpivot Columns into Rows in MySQL?

MySQL에서 열을 행으로 변환하는 방법

MySQL에서 열로 구성된 데이터로 작업할 때 데이터를 행으로 표시하는 형식으로 변환해야 할 수도 있습니다. 이 프로세스를 피벗 해제라고 합니다.

질문:

다음 형식을 고려하세요.

<code>ID | a  | b  | c 
1  | a1 | b1 | c1
2  | a2 | b2 | c2</code>

목표는 열을 행으로 변환하여 다음 구조의 테이블을 얻는 것입니다.

<code>ID | 值 | 列名
1  | a1 | a
1  | b1 | b
1  | c1 | c
2  | a2 | a
2  | b2 | b
2  | c2 | c</code>

해결책:

일부 다른 데이터베이스와 달리 MySQL에는 해제 기능이 내장되어 있지 않습니다. 원하는 결과를 얻으려면 UNION ALL 쿼리를 사용하여 각 열을 선택적으로 행으로 변환하는 별도의 쿼리를 결합할 수 있습니다.

<code class="language-sql">SELECT id, 'a' AS col, a AS value
FROM yourtable
UNION ALL
SELECT id, 'b' AS col, b AS value
FROM yourtable
UNION ALL
SELECT id, 'c' AS col, c AS value
FROM yourtable;</code>

이 쿼리는 각 열에 하나씩 세 가지 데이터 세트를 생성합니다. 각 그룹에는 ID, 열 이름 및 해당 값이 포함됩니다.

CROSS JOIN 사용:

또 다른 방법은 CROSS JOIN:

을 사용하는 것입니다.
<code class="language-sql">SELECT t.id,
       c.col,
       CASE c.col
           WHEN 'a' THEN a
           WHEN 'b' THEN b
           WHEN 'c' THEN c
       END AS data
FROM yourtable t
CROSS JOIN
(
    SELECT 'a' AS col
    UNION ALL SELECT 'b'
    UNION ALL SELECT 'c'
) c;</code>

이 경우 CROSS JOINyourtable의 행과 열 이름을 생성하는 하위 쿼리의 행 사이에 데카르트 곱을 생성합니다. CASE 문은 각 열 이름을 해당 열 값에 매핑합니다.

두 가지 방법 모두 효과적으로 데이터를 풀어 원하는 행 기반 구조를 제공합니다.

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

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