집 >데이터 베이스 >MySQL 튜토리얼 >고유한 레코드를 보존하는 동적 PIVOT 쿼리를 만드는 방법은 무엇입니까?
고유 레코드를 보존하기 위한 동적 PIVOT 쿼리
문제:
PIVOT 쿼리는 종종 MAX를 사용합니다. () 데이터를 요약하기 위한 집계로 인해 고유한 데이터가 손실될 수 있습니다. 가치. 예를 들어, 동일한 이름에 대한 여러 활동 레코드가 있는 테이블에서 PIVOT은 MAX() 값이 더 낮은 레코드를 무시할 수 있습니다.
목표:
동적 PIVOT 만들기 고유한 레코드와 해당 비율을 유지하는 쿼리 값.
해결책:
;with cte as ( select *, ROW_NUMBER() over (partition by name order by percentage desc) ROWNUM from A ), 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
동적 쿼리 생성:
동적 쿼리 생성의 경우 쉼표로 구분된 목록을 바꿉니다. 이름(@name_concat, @name1_concat) 및 SELECT MAX() 집계(@select_aggs)와 다음을 수행할 수 있는 변수 런타임 시 채워집니다.
예제 결과:
쿼리는 고유한 이름 행과 해당 비율을 유지하면서 원하는 출력을 반환합니다.
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 쿼리를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!