> 데이터 베이스 > MySQL 튜토리얼 > 0보다 큰 값을 사용하여 MySQL에서 동적 열을 행으로 바꾸는 방법은 무엇입니까?

0보다 큰 값을 사용하여 MySQL에서 동적 열을 행으로 바꾸는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-11 20:31:11
원래의
801명이 탐색했습니다.

How to Transpose Dynamic Columns to Rows in MySQL with Values Greater Than 0?

동적 열을 행으로 전치: 원하는 변환 달성

소개:
열에서 데이터 피벗 해제 행은 데이터 조작의 일반적인 작업입니다. 이 문서에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿