Sql 左联接子查询,但限制为第一行
我正在将一个度量表连接到一个客户列表。当前在联接时,将为所有行上的每个客户端填充联接列 目标是每个客户机分组(hsp.PROV_ID)只填充一次度量第二图像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
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”级别。请不要发布数据的图像;数据为
文本
,应按此提供。这些数据是什么,你没有解释。可能是重复的