通过从多个sql表中选择值更新表
我正在使用多个表中的值更新表通过从多个sql表中选择值更新表,sql,Sql,我正在使用多个表中的值更新表 UPDATE pv SET pv.[TotalDInTCG] = Dr.TCGDCnt ,pv.[AvgHbA1cImprovement] = hsd.AvgHbA1cCnt ,pv.[TotalCHDInTCG] = cpc.CHdCnt ,pv.[TotalCHDNTCG] = cpd1.CHdWithCholBPCnt ,pv.[Percen
UPDATE pv SET
pv.[TotalDInTCG] = Dr.TCGDCnt
,pv.[AvgHbA1cImprovement] = hsd.AvgHbA1cCnt
,pv.[TotalCHDInTCG] = cpc.CHdCnt
,pv.[TotalCHDNTCG] = cpd1.CHdWithCholBPCnt
,pv.[PercentageOfCHDWithBPChol] = icp.CHFElligPopul
,pv.[TotalCOPDInTCG] = copd.TcgCOPDcount
,pv.[TotalCOPDMRCPOxySatuLevel] = copdmrc.TotalCOLevel
,pv.[PercentOferTCG] = copdOxSatu.oxySatligPopu
FROM #tmpeTabel AS pv
INNER JOIN #DRegistered AS Dr
ON Dr.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND Dr.Years = pv.[ReportYear]
AND Dr.Months = pv.[ReportMonth]
INNER JOIN #HbA1cScoreDetails AS hsd
ON hsd.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND hsd.Years = pv.[ReportYear]
AND hsd.Months = pv.[ReportMonth]
INNER JOIN #CHDCount as cpc
ON cpc.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND cpc.Years = pv.[ReportYear]
AND cpc.Months = pv.[ReportMonth]
INNER JOIN #CHDBPCholPatientsDetails as cpd1
ON cpd1.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND cpd1.Years = pv.[ReportYear]
AND cpd1.Months = pv.[ReportMonth]
INNER JOIN #ImprovementCHFPerPractice as icp
ON icp.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND icp.Years = pv.[ReportYear]
AND icp.Months = pv.[ReportMonth]
INNER JOIN #COPDCount as copd
ON copd.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND copd.Years = pv.[ReportYear]
AND copd.Months = pv.[ReportMonth]
INNER JOIN #COPDDetailsMRCOxygenSatuLevel as copdmrc
ON copdmrc.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND copdmrc.Years = pv.[ReportYear]
AND copdmrc.Months = pv.[ReportMonth]
INNER JOIN #ImprovPerElligPopula as copdOxSatu
ON copdOxSatu.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND copdOxSatu.Years = pv.[ReportYear]
AND copdOxSatu.Months = pv.[ReportMonth]
这里的问题是,有些表有许多行,有些表有较少的行。但在更新之后,我得到的所有表的行都更少
我是否应该对每个select表格分别使用update…假设您在
pv
中更新的列都可以为空,这应该确保您捕获所有相关数据:
UPDATE pv SET
pv.[TotalDInTCG] = Dr.TCGDCnt
,pv.[AvgHbA1cImprovement] = hsd.AvgHbA1cCnt
,pv.[TotalCHDInTCG] = cpc.CHdCnt
,pv.[TotalCHDNTCG] = cpd1.CHdWithCholBPCnt
,pv.[PercentageOfCHDWithBPChol] = icp.CHFElligPopul
,pv.[TotalCOPDInTCG] = copd.TcgCOPDcount
,pv.[TotalCOPDMRCPOxySatuLevel] = copdmrc.TotalCOLevel
,pv.[PercentOferTCG] = copdOxSatu.oxySatligPopu
FROM #tmpeTabel AS pv
LEFT JOIN #DRegistered AS Dr
ON Dr.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND Dr.Years = pv.[ReportYear]
AND Dr.Months = pv.[ReportMonth]
LEFT JOIN #HbA1cScoreDetails AS hsd
ON hsd.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND hsd.Years = pv.[ReportYear]
AND hsd.Months = pv.[ReportMonth]
LEFT JOIN #CHDCount as cpc
ON cpc.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND cpc.Years = pv.[ReportYear]
AND cpc.Months = pv.[ReportMonth]
LEFT JOIN #CHDBPCholPatientsDetails as cpd1
ON cpd1.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND cpd1.Years = pv.[ReportYear]
AND cpd1.Months = pv.[ReportMonth]
LEFT JOIN #ImprovementCHFPerPractice as icp
ON icp.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND icp.Years = pv.[ReportYear]
AND icp.Months = pv.[ReportMonth]
LEFT JOIN #COPDCount as copd
ON copd.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND copd.Years = pv.[ReportYear]
AND copd.Months = pv.[ReportMonth]
LEFT JOIN #COPDDetailsMRCOxygenSatuLevel as copdmrc
ON copdmrc.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND copdmrc.Years = pv.[ReportYear]
AND copdmrc.Months = pv.[ReportMonth]
LEFT JOIN #ImprovPerElligPopula as copdOxSatu
ON copdOxSatu.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND copdOxSatu.Years = pv.[ReportYear]
AND copdOxSatu.Months = pv.[ReportMonth]
使用左连接而不是内部连接,可以更新该值,即使它与某些表不匹配 使用ISNULL函数避免更新PV中的null值
UPDATE pv SET
pv.[TotalDInTCG] = Dr.TCGDCnt
,pv.[AvgHbA1cImprovement] = hsd.AvgHbA1cCnt
,pv.[TotalCHDInTCG] = cpc.CHdCnt
,pv.[TotalCHDNTCG] = cpd1.CHdWithCholBPCnt
,pv.[PercentageOfCHDWithBPChol] = icp.CHFElligPopul
,pv.[TotalCOPDInTCG] = copd.TcgCOPDcount
,pv.[TotalCOPDMRCPOxySatuLevel] = copdmrc.TotalCOLevel
,pv.[PercentOferTCG] = copdOxSatu.oxySatligPopu
FROM #tmpeTabel AS pv
LEFT JOIN #DRegistered AS Dr
ON Dr.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND Dr.Years = pv.[ReportYear]
AND Dr.Months = pv.[ReportMonth]
LEFT JOIN #HbA1cScoreDetails AS hsd
ON hsd.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND hsd.Years = pv.[ReportYear]
AND hsd.Months = pv.[ReportMonth]
LEFT JOIN #CHDCount as cpc
ON cpc.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND cpc.Years = pv.[ReportYear]
AND cpc.Months = pv.[ReportMonth]
LEFT JOIN #CHDBPCholPatientsDetails as cpd1
ON cpd1.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND cpd1.Years = pv.[ReportYear]
AND cpd1.Months = pv.[ReportMonth]
LEFT JOIN #ImprovementCHFPerPractice as icp
ON icp.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND icp.Years = pv.[ReportYear]
AND icp.Months = pv.[ReportMonth]
LEFT JOIN #COPDCount as copd
ON copd.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND copd.Years = pv.[ReportYear]
AND copd.Months = pv.[ReportMonth]
LEFT JOIN #COPDDetailsMRCOxygenSatuLevel as copdmrc
ON copdmrc.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND copdmrc.Years = pv.[ReportYear]
AND copdmrc.Months = pv.[ReportMonth]
LEFT JOIN #ImprovPerElligPopula as copdOxSatu
ON copdOxSatu.SK_ServiceProviderID = pv.SK_ServiceProviderID
AND copdOxSatu.Years = pv.[ReportYear]
AND copdOxSatu.Months = pv.[ReportMonth]
左外连接工作。。主要问题是由于内部联接的正常行为造成的这很正常,您在任何地方都使用内部联接…您尝试过左外部联接吗?谢谢,这很有效:)