我有一张表有一些副本。我可以统计不同的记录以获得总体积。当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来内部加入表格,但仍然得到错误的总和计数。
谢谢!
答案 0 :(得分:0)
您的B92_Sum
目前返回NULL
,1
或2
,这绝对不是总和。
要对不同的值求和,您需要类似
的内容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