2016-06-07 7 views
1

피벗을 수행하는 데 사용하는 SQL 코드가 있습니다. 코드는 다음과 같습니다 :피벗 테이블이 동일한 ID에 대해 두 개 이상의 행을 반환합니다.

SELECT DISTINCT PersonID 
,MAX(pivotColumn1) 
,MAX(pivotColumn2) --originally these were in 2 separate rows) 
FROM(SELECT srcID, PersonID, detailCode, detailValue) FROM src) AS SrcTbl 
PIVOT(MAX(detailValue) FOR detailCode IN ([pivotColumn1],[pivotColumn2])) pvt 
GROUP BY PersonID 

원본 데이터에서 ID는 값을 구분하는 자체 ID가 있으므로 2 개의 개별 행을 갖습니다. 필자는 지금 피봇 팅하고 ID를 그룹화하고 피벗 열에서 집계를 사용하더라도 여전히 ID에 대해 2 개의 별도 행을 제공합니다. 코드에 무슨 문제가 있습니까?

그래서 가능한 모든 detailCode를 IN 절에 나열했습니다. 그래서 값이 없음 때 null이 반환 된 있지만 모두 1 행에 요약 된 싶습니다. 아래 이미지를 참조하십시오. 사람들은 detailCode의 모든 옵션이있는 경우

enter image description here

+0

샘플 데이터 및 예상 결과 것은 –

+1

가'pivot'을 사용하십시오 중 하나 또는 'group by '을 사용하십시오. 그러나 함께 사용하는 것은 아닙니다. 'pivot'을 사용한다면, 두 행을 다르게 보이게하는 서브 쿼리의 컬럼을 제거해야합니다. –

답변

1

, 당신은 CASE EXPRESSION 대신 Pivot의와 조건 집합을 사용할 수 있습니다

SELECT t.personID, 
     MAX(CASE WHEN t.detailCode = 'cas' then t.detailValue END) as cas, 
     MAX(CASE WHEN t.detailCode = 'buy' then t.detailValue END) as buy, 
     MAX(CASE WHEN t.detailCode = 'sel' then t.detailValue END) as sel, 
     MAX(CASE WHEN t.detailCode = 'pla' then t.detailValue END) as pla 
FROM YourTable t 
GROUP BY t.personID 
+0

하지만 2 개 이상의 행이있는 경우가 있으므로 어떤 질문을 던지보십시오. 죄송합니다 제가 질문을 게시했을 때 – Faiz

+0

네, 데이터 샘플을 게시해야합니다. @Faiz – sagi

+0

@Faiz 답변이 업데이트되었습니다. 이제 해결 될 것입니다. – sagi

관련 문제