동적 열을 행으로 전치: 원하는 변환 달성
소개:
열에서 데이터 피벗 해제 행은 데이터 조작의 일반적인 작업입니다. 이 문서에서는 0보다 큰 값만 고려하여 Table_1의 동적 열을 전치하여 원하는 Expected_Result_Table을 얻는 방법을 살펴봅니다.
MySQL의 UNPIVOT 함수:
MySQL은 기본적으로 UNPIVOT을 제공하지 않습니다. 기능. 그러나 원하는 결과를 얻으려면 다음 방법을 사용할 수 있습니다.
정적 열 기반 접근 방식:
제한된 수의 정적 열의 경우 일련의 UNION을 사용할 수 있습니다. 전치된 테이블을 생성하는 ALL 문입니다. 각 문은 특정 열을 Word 및 Qty로 선택합니다. 이 접근 방식은 열 개수가 알려진 정적 스키마에 적합합니다.
동적 열 기반 접근 방식:
열 개수를 알 수 없는 동적 스키마의 경우 더 정교한 접근 방식은 다음과 같습니다. 필수의. 준비된 문을 사용하여 열을 피벗하는 동적 SQL을 생성할 수 있습니다. 여기에는 각 열에 대한 UNION ALL 문을 동적으로 생성하는 작업이 포함됩니다.
동적 열의 예:
제공된 MySQL 쿼리는 동적 접근 방식을 사용하여 Table_1의 열을 바꾸는 방법을 보여줍니다.
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'select id, ''', c.column_name, ''' as word, ', c.column_name, ' as qty from yt where ', c.column_name, ' > 0' ) SEPARATOR ' UNION ALL ' ) INTO @sql FROM information_schema.columns c where c.table_name = 'yt' and c.column_name not in ('id') order by c.ordinal_position; SET @sql = CONCAT('select id, word, qty from (', @sql, ') x order by id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
결론:
둘 중 하나를 사용하여 정적 또는 동적 접근 방식을 사용하면 0보다 큰 값만 고려하여 MySQL에서 동적 열을 효과적으로 전치하여 Expected_Result_Table로 표시되는 원하는 행 기반 구조를 얻을 수 있습니다.
위 내용은 0보다 큰 값을 사용하여 MySQL에서 동적 열을 행으로 바꾸는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!