MySQL은 행 데이터를 열 데이터로 변환하는 기능을 지원하므로 필요에 따라 새 열을 동적으로 추가할 수 있습니다. 이 프로세스는 데이터를 보다 사용자 친화적인 표 형식으로 표시하는 피벗 테이블과 관련되는 경우가 많습니다. 이 변환을 수행하려면 GROUP BY
및 MAX
기능을 사용할 수 있습니다.
다음은 테이블 A와 테이블 B가 포함된 예입니다.
<code>表 A +--+-----+----+ |id|order|data| +--+-----+----+ |1 |1 |P | +--+-----+----+ |2 |2 |Q | +--+-----+----+ |2 |1 |R | +--+-----+----+ |1 |2 |S | +--+-----+----+ 表 B +--+----+----+ |id|name|value| +--+----+----+ |1 |name1|data1| +--+----+----+ |1 |name2|data2| +--+----+----+ |2 |name1|data3| +--+----+----+ |2 |name2|data4| +--+----+----+</code>
이 데이터 구조를 행과 열이 있는 테이블로 변환하려면 다음 쿼리를 사용할 수 있습니다.
<code class="language-sql">SELECT ID, MAX(IF(`order` = 1, data, NULL)) AS data1, MAX(IF(`order` = 2, data, NULL)) AS data2 FROM TableA GROUP BY ID</code>
이 쿼리의 결과는 다음과 같습니다.
<code>+--+-----+-----+ |id|data1|data2| +--+-----+-----+ |1 |P |S | +--+-----+-----+ |2 |R |Q | +--+-----+-----+</code>
보시다시피 테이블 B의 각 행은 결과 테이블의 열로 변환되었습니다.
데이터에 동일한 "순서" 필드에 대한 여러 값이 포함되어 있는 경우 동적 SQL을 결합하여 변환을 보다 효율적으로 처리할 수 있습니다. 이 방법에는 "순서" 필드의 다양한 값을 기반으로 쿼리를 동적으로 생성하는 작업이 포함됩니다.
<code class="language-sql">SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(`order` = ', `order`, ',data,NULL)) AS data', `order`) ) INTO @sql FROM TableName; SET @sql = CONCAT('SELECT ID, ', @sql, ' FROM TableName GROUP BY ID'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;</code>
이 동적 SQL 접근 방식의 장점은 "주문" 필드에 새 값이 추가될 때마다 쿼리를 수동으로 수정할 필요가 없다는 것입니다.
위 내용은 MySQL에서 행을 열로 동적으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!