2016-08-27 4 views
0

일부 중복 된 테이블이 있습니다. 별개의 기록을 세어 총 볼륨을 얻을 수 있습니다. CompTia 코드가 B92 일 때 합계를 시도 할 때 별개로 실행하면 여전히 속임수가 계산됩니다.Teradata에서 중복 된 테이블의 고유 레코드 합계

select 
a.repair_week_period, 
count(distinct a.notif_id) as Total_Volume, 
sum(distinct case when a.header_comptia_cd = 'B92' then 1 else 0 end) as B92_Sum 
FROM artemis_biz_app.aca_service_event a 
where a.Sales_Org_Cd = '8210' 
and a.notif_creation_dt >= current_date - 180 
group by 1 
order by 1 
; 

에만 B92에 대한 별개의 기록을 SUM 할 수있는 방법이 여기있다 :

쿼리입니까?

또한 고유 한 알림 ID를 선택하고 해당 알림 ID에 합류하면서 자체적으로 테이블을 내부 조인하려했지만 여전히 잘못된 총계 수를 얻었습니다.

감사합니다.

+4

샘플 데이터와 결과가 기록 이상을 가질 수로 1 개 이상의 일을 할 수 있습니다 중 하나 notif_id 표에서 이해 –

답변

0

귀하의 B92_Sum은 현재 NULL, 1 또는 2 중 하나를 반환합니다. 이는 분명히 합계가 아닙니다.

column_to_sum은 실제로 당신이 조건부 수가 아니라 합계를 얻을 notif_id 경우 당신이

sum(distinct case when a.header_comptia_cd = 'B92' then column_to_sum else 0 end) 

같은 뭔가가 필요 고유 한 값을 요약합니다.

그렇지 않으면 너무 많은 알엇을 제거 할 수 독특하고 그때는 아마 당신이 집계되기 전에 중복을 제거 파생 테이블이 필요 : 내 문제에 대한 솔루션은 데이터를 SUM 아니었다 보인다 @dnoeth

select 
    repair_week_period, 
    --no more distinct needed 
    count(a.notif_id) as Total_Volume, 
    sum(case when a.header_comptia_cd = 'B92' then column_to_sum else 0 end) as B92_Sum 
FROM 
(
    select repair_week_period, 
     notif_id 
     header_comptia_cd, 
     column_to_sum 
    from artemis_biz_app.aca_service_event 
    where a.Sales_Org_Cd = '8210' 
    and a.notif_creation_dt >= current_date - 180 
    -- only onw row per notif_id 
    qualify row_number() over (partition by notif_id order by ???) = 1 
) a 
group by 1 
order by 1 
; 
+0

에 도움이 될 것 예상 :

내가 내 문제를 해결하는 방법입니다 하나 notif_id. 내가 합계를 실행하려고 할 때 (별개의 경우 a.header_comptia_cd = 'B92'다음에 column_to_sum else 0 end). column_to_sum을 찾을 수 없다는 오류가 발생합니다. – txwylde

+0

@txwylde : 물론 'column_to_sum'이 없습니다.이 열은 합치려고하는 * your * 열입니다. 몇 가지 예제 데이터와 예상 결과 (뒤에 논리 포함)가 없으면 더 이상 당신을 도울 방법이 없습니다. – dnoeth

+0

예제 데이터를 붙여 넣는 데 문제가있어 너무 오래되었습니다. notif_id는 다음과 같습니다. 030249365316 header_comptia_cd는 다음과 같습니다. B81. 레코드는 고유 한 notif_id 및 header_comptia_cd 또는 여러 notif_id 및 header_comptia_cd를 가질 수 있습니다. – txwylde

0

을, 그러나 countdistinct입니다.

count(distinct case when a.header_comptia_cd = 'B92' then a.notif_id else NULL end) as B92_Sum