>데이터 베이스 >MySQL 튜토리얼 >동적으로 생성된 사용자 정의 열 이름으로 SQL 테이블 데이터를 어떻게 전치할 수 있습니까?

동적으로 생성된 사용자 정의 열 이름으로 SQL 테이블 데이터를 어떻게 전치할 수 있습니까?

DDD
DDD원래의
2025-01-05 21:40:41594검색

How Can I Transpose SQL Table Data with Dynamically Generated User-Defined Column Names?

사용자 정의 필드 이름으로 SQL 테이블 데이터 전치

데이터를 피벗하거나 전치하려면 열이 속성을 나타내고 행은 엔터티 데이터를 테이블로 나타내며, 행은 속성을 나타내고 열은 엔터티 데이터를 나타냅니다. 이는 제공된 예제 테이블에서 볼 수 있듯이 사용자 정의 필드 이름으로 작업할 때 종종 유용합니다.

전치된 테이블 쿼리

주어진 테이블을 전치하려면 표시된 대로 SQL 함수와 조건문의 조합을 사용할 수 있습니다. 아래:

SELECT t.UserId,
       MAX(CASE WHEN t.FieldName = 'Username' THEN t.FieldValue ELSE NULL END) AS Username,
       MAX(CASE WHEN t.FieldName = 'Password' THEN t.FieldValue ELSE NULL END) AS Password,
       MAX(CASE WHEN t.FieldName = 'Email Address' THEN t.FieldValue ELSE NULL END) AS Email
FROM t
GROUP BY t.UserId

설명

  • MAX 함수는 특정 필드 이름의 필드 값에 해당하는 각 열의 최대값을 반환합니다.
  • CASE 문은 FieldName 열을 평가하고 WHERE 열에 나타나는 각 필드 이름에 해당하는 FieldValue를 반환합니다. 절.
  • GROUP BY 절은 결과를 UserId별로 그룹화하여 각 사용자의 데이터가 별도의 행에 배치되도록 합니다.

준비된 문을 사용한 동적 쿼리

필드 이름의 동적 목록을 처리하려면 MySQL의 준비된 문(동적 SQL)을 활용할 수 있습니다. 구문:

SET @sql = 'SELECT UserId, ';
SELECT GROUP_CONCAT(CONCAT('MAX(CASE WHEN FieldName = ''', FieldName, ''' THEN FieldValue ELSE NULL END) AS ', FieldName)) INTO @sql FROM (SELECT DISTINCT FieldName FROM t);
SET @sql = CONCAT(@sql, ' FROM t GROUP BY UserId');
PREPARE stmt FROM @sql;
EXECUTE stmt;

이 쿼리는 테이블의 고유 필드 이름을 기반으로 SQL 문을 동적으로 작성하고 준비된 문을 사용하여 실행합니다.

위 내용은 동적으로 생성된 사용자 정의 열 이름으로 SQL 테이블 데이터를 어떻게 전치할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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