여러 열을 기반으로 MySQL에서 행을 열로 동적으로 변환하는 방법은 무엇입니까?
Dec 29, 2024 pm 02:22 PMMySQL의 여러 열을 기반으로 행을 열로 동적 변환
이전 질문에서는 MySQL 쿼리를 사용하여 행을 동적으로 변환했습니다. 단일 열의 열에. 이제 "data"와 "price"라는 두 열에 대해 동일한 결과를 달성하는 것을 목표로 합니다.
문제:
다음 표의 데이터를 열로 변환합니다. "order1", "order2", "order3", "item1", "item2", "item3" 및 "item4"라는 이름이 지정되었습니다. "주문" 및 "항목" 열.
id | order | data | item | Price |
---|---|---|---|---|
1 | 1 | P | 1 | 50 |
1 | 1 | P | 2 | 60 |
1 | 1 | P | 3 | 70 |
1 | 2 | Q | 1 | 50 |
1 | 2 | Q | 2 | 60 |
1 | 2 | Q | 3 | 70 |
2 | 1 | P | 1 | 50 |
2 | 1 | P | 2 | 60 |
2 | 1 | P | 4 | 80 |
2 | 3 | S | 1 | 50 |
2 | 3 | S | 2 | 60 |
2 | 3 | S | 4 | 80 |
원하는 결과:
id | order1 | order2 | order3 | item1 | item2 | item3 | item4 |
---|---|---|---|---|---|---|---|
1 | P | Q | 50 | 60 | 70 | ||
2 | P | S | 50 | 60 | 80 |
해결책:
"주문" 및 "항목" 값의 수가 다음과 같은 경우 하드 코딩된 쿼리를 사용할 수 있습니다. 알려져 있지만 일반적인 경우에는 보다 동적인 솔루션이 필요합니다.
데이터 피벗 해제:
MySQL에는 피벗 해제 기능이 없지만 UNION ALL을 사용하여 변환할 수 있습니다. 여러 데이터 쌍을 행으로 변환:
select id, concat('order', `order`) col, data value from tableA union all select id, concat('item', item) col, price value from tableA;
값을 다시 열:
CASE:
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의 여러 기준에 따라 행을 열로 변환하는 유연하고 동적인 방법을 제공합니다.
위 내용은 여러 열을 기반으로 MySQL에서 행을 열로 동적으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Alter Table 문을 사용하여 MySQL에서 테이블을 어떻게 변경합니까?

MySQL의 문제를 해결하는 방법 공유 라이브러리를 열 수 없습니다.

Linux에서 MySQL을 실행합니다 (Phpmyadmin이있는 Podman 컨테이너가 포함되지 않음)

일반적인 취약점 (SQL 주입, 무차별 적 공격)에 대해 MySQL을 어떻게 보호합니까?
