고유 레코드에 대한 PIVOT 쿼리의 데이터 손실 방지
문제:
PIVOT 쿼리는 구조 조정에 유용합니다. 정보를 보다 체계적으로 표시하기 위한 데이터입니다. 그러나 고유 레코드를 처리할 때 MAX 집계 함수로 인해 0 값이 생략되어 데이터가 불완전해질 수 있습니다.
해결책:
모든 고유 레코드를 보존하려면 값이 0인 경우 ROW_NUMBER() 함수를 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
예:
다음 표를 고려하세요.
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 쿼리가 다음을 생성했습니다. 결과:
Id | Code | James | James_ | Sam | Sam_ | Lisa | Lisa_ |
---|---|---|---|---|---|---|---|
1 | Prashant | Running | 43.43 | Cooking 1 | 73 | Walking | 90.34 |
1 | Prashant | Stealing | 0.0 | Cooking | 3.43 | NULL | NULL |
1 | Prashant | NULL | NULL | NULL | NULL | NULL | NULL |
그러나 ROW_NUMBER() 함수를 통합하면 수정된 쿼리는 모든 고유한 레코드를 유지합니다.
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 |
이 접근 방식을 사용하면 0% 값을 사용하여 데이터를 더욱 정확하게 표현합니다.
위 내용은 값이 0인 고유 레코드에 대해 PIVOT 쿼리를 사용할 때 데이터 손실을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!