开发者社区 问答 正文

左联接子查询,但限制为第一行

我正在将指标表加入客户列表。当前,当加入时,加入的列将填充所有行中的每个客户端。

目标是每个客户端组(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

展开
收起
保持可爱mmm 2019-11-18 11:26:33 359 分享 版权
1 条回答
写回答
取消 提交回答
  • 如果我了解您的问题,则只需要每个“第一”行上的指标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”级别。

    2019-11-18 11:26:42
    赞同 展开评论
问答地址: