在Teradata中使用重复项对表中的不同记录求和

时间:2016-08-27 03:28:10

标签: sql sum case distinct teradata

我有一张表有一些副本。我可以统计不同的记录以获得总体积。当CompTia代码为B92并且运行不同时,我尝试求和时仍然计算欺骗行为。

以下是查询:

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的不同记录进行求和?

我还尝试通过选择不同的通知ID并加入该通知ID来内部加入表格,但仍然得到错误的总和计数。

谢谢!

2 个答案:

答案 0 :(得分:0)

您的B92_Sum目前返回NULL12,这绝对不是总和。

要对不同的值求和,您需要类似

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

如果column_to_sum实际上是notif_id,则会获得条件计数但不是总和。

否则,distinct可能会删除太多的vales,然后您可能需要一个派生表,在聚合之前删除重复项:

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
;

答案 1 :(得分:0)

@dnoeth我的问题的解决方案似乎不是SUM数据,而是count distinct

这就是我解决问题的方法:

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