Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过从多个sql表中选择值更新表_Sql - Fatal编程技术网

通过从多个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]

左外连接工作。。主要问题是由于内部联接的正常行为造成的

这很正常,您在任何地方都使用内部联接…您尝试过左外部联接吗?谢谢,这很有效:)