我正在将指标表加入客户列表。当前,当加入时,加入的列将填充所有行中的每个客户端。
目标是每个客户端组(hsp.PROV_ID)仅填充一次该指标。-第二张图片
select hsp.PROV_ID, HSP.id from hsp_client hsp
left join(select vat.ASGN_PROV_ID, sum(vat.ASGN_DFI_CNT) as 'Deficiency Count', sum(vat.DLQ_DFI_CNT) as 'Delinquent Count' from V_DT_PROV_ASGN_METRICS vat
where VAT.PAT_CLASS_C IN ('101', '102','104') and VAT.METRIC_DATE = Convert(DATE, GetDate()) --and DEF_ID IS NULL and vat.DEF_TYPE_C not in ('9') group by vat.ASGN_PROV_ID,vat.ASGN_DFI_CNT,vat.DLQ_DFI_CNT ) vtt on vtt.ASGN_PROV_ID =hsp.PROV_ID
group by hsp.PROV_ID, hsp.id
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
如果我了解您的问题,则只需要每个“第一”行上的指标prov_id,其中“第一”行由定义hsp.id。
您不需要外部查询中的聚合,只需要有关窗口函数的一些逻辑即可:
select hsp.PROV_ID, HSP.id, (case when hsp.id = min(hsp.id) over (partition by hsp.prov_id) then vtt.DeficiencyCount end) as DeficiencyCount, (case when hsp.id = min(hsp.id) over (partition by hsp.prov_id) then vtt.DelinquentCount end), from hsp_client hsp left join (select vat.ASGN_PROV_ID, sum(vat.ASGN_DFI_CNT) as DeficiencyCount, sum(vat.DLQ_DFI_CNT) as DelinquentCount from V_DT_PROV_ASGN_METRICS vat where VAT.PAT_CLASS_C IN ('101', '102','104') and VAT.METRIC_DATE = Convert(DATE, GetDate()) and --and DEF_ID IS NULL vat.DEF_TYPE_C not in ('9') group by vat.ASGN_PROV_ID ) vtt on vtt.ASGN_PROV_ID = hsp.PROV_ID order by hsp.PROV_ID, hsp.id; 这种逻辑通常在应用程序层中完成,但是您可以在SQL中完成。
我什至不确定子查询中是否需要聚合。但是。。。它只能是“ prov id”级别。