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

Sql 左联接子查询,但限制为第一行,sql,sql-server,Sql,Sql Server,我正在将一个度量表连接到一个客户列表。当前在联接时,将为所有行上的每个客户端填充联接列 目标是每个客户机分组(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 C

我正在将一个度量表连接到一个客户列表。当前在联接时,将为所有行上的每个客户端填充联接列

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

如果我了解您的问题,您只需要在每个
prov\u 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”级别。

请不要发布数据的图像;数据为
文本
,应按此提供。这些数据是什么,你没有解释。可能是重复的