> 데이터 베이스 > MySQL 튜토리얼 > 테이블을 동적으로 PIVOT하고 백분율이 0인 고유한 레코드를 유지하는 방법은 무엇입니까?

테이블을 동적으로 PIVOT하고 백분율이 0인 고유한 레코드를 유지하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-28 16:52:10
원래의
993명이 탐색했습니다.

How to Dynamically PIVOT a Table and Retain Distinct Records with Zero Percentages?

고유 레코드에 대한 동적 PIVOT 쿼리

문제:

다음 표를 고려하세요.

| Id | Code | percentage | name | name1 | activity |
|---|---|---|---|---|---|
| 1 | Prashant | 43.43 | James | James_ | Running |
| 1 | Prashant | 70.43 | Sam | Sam_ | Cooking |
| 1 | Prashant | 90.34 | Lisa | Lisa_ | Walking |
| 1 | Prashant | 0.00 | James | James_ | Stealing |
| 1 | Prashant | 0.00 | James | James_ | Lacking |
| 1 | Prashant | 73 | Sam | Sam_ | Cooking 1 |
로그인 후 복사

사용 표준 PIVOT 쿼리의 경우 0.00%의 고유한 레코드를 유지하는 것이 어려울 수 있습니다. MAX 함수는 종종 이러한 행을 무시하여 불완전한 결과를 초래합니다.

예상 결과:

| Id | Code | James | James_ | Sam | Sam_ | Lisa | Lisa_ |
|---|---|---|---|---|---|---|---|
| 1 | Prashant | Running | 43.43 | Cooking 1 | 73 | Walking | 90.34 |
| 1 | Prashant | Stealing | 0.00 | Cooking | 3.43 | NULL | NULL |
| 1 | Prashant | Lacking | 0.00 | NULL | NULL | NULL | NULL |
로그인 후 복사

해결책:

이 문제를 해결하기 위해 PIVOT 쿼리에 ROW_NUMBER() 함수를 도입할 수 있습니다. 이 기능은 각 이름 그룹 내의 레코드에 행 번호를 할당하여 0.00%의 레코드도 유지되도록 합니다.

;with cte as (
    select *, ROW_NUMBER() over (partition by name order by percentage desc) ROWNUM
    from table_name
),
cte2 as (
    SELECT Id,Code,ROWNUM,James,James_,Sam,Sam_,Lisa,Lisa_
    FROM cte
    PIVOT(MAX(activity)
          FOR name IN (James,Sam,Lisa)) AS PVTTable PIVOT
          (
          MAX(percentage)
          FOR name1 IN (James_,Sam_,Lisa_)) AS PVTTable1
)
select Id, Code, MAX(James) James, MAX(James_) James_, MAX(Sam) Sam, MAX(Sam_) Sam_, MAX(Lisa) Lisa, MAX(Lisa_) Lisa_
from cte2
group by Id, Code, ROWNUM
로그인 후 복사

설명:

  • 첫 번째 공통 테이블 표현식(cte)은 테이블에 ROWNUM 열을 추가하여 각 이름 그룹 내의 레코드를 백분율에 따라 내림차순으로 정렬합니다. order.
  • 두 번째 공통 테이블 표현식(cte2)은 PIVOT 함수를 사용하여 데이터를 재구성합니다.
  • 마지막으로 결과를 Id, Code 및 ROWNUM별로 그룹화하여 피벗 결과를 결합합니다. 0.00% 기록을 유지합니다.

중요 참고:

쿼리를 동적으로 만들기 위해 하드코딩된 name 및 name1 값을 런타임 시 채울 수 있는 동적 변수로 바꿀 수 있습니다. 이를 통해 쿼리는 다양한 수의 열이 포함된 테이블을 처리할 수 있습니다.

위 내용은 테이블을 동적으로 PIVOT하고 백분율이 0인 고유한 레코드를 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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