使用Count取决于列内容,使用多个CASE优化查询

时间:2018-04-23 11:33:38

标签: sql sql-server optimization sql-server-2014

我有一个查询的一部分,我正在尝试优化。我的表格有很多信息,如果我们能够对它进行一些优化,那将对我们有所帮助。

这部分需要更长的时间:

CASE 
        WHEN {SPS_FACTURAS}.[TipoFactura] = 'F' 
         AND {SPS_FACTURAS}.[IsPurged] = 0 THEN (SELECT COUNT(DISTINCT NumRec)
                                                   FROM {SPS_LINFARMA} linfarma
                                                  WHERE linfarma.[IdCodFact] = {SPS_FACTURAS}.[IdCodFact])
        WHEN {SPS_FACTURAS}.[TipoFactura] = 'F' 
         AND {SPS_FACTURAS}.[IsPurged] = 1 THEN (SELECT COUNT(DISTINCT NumRec)
                                                   FROM {SPS_HISTLINFARMA} histfarm
                                                  WHERE histfarm.[IdCodFact] = {SPS_FACTURAS}.[IdCodFact])
        WHEN {SPS_FACTURAS}.[TipoFactura] = 'C' 
         AND {SPS_FACTURAS}.[NomUsrIns] <> 'WS_Faturacao'
         AND {SPS_FACTURAS}.[IsPurged] = 0 THEN (SELECT COUNT(DISTINCT NUMFICH)
                                                   FROM {SPS_LINFACT2} linha
                                                  WHERE linha.[IdCodFact] = {SPS_FACTURAS}.[IdCodFact])
        WHEN {SPS_FACTURAS}.[TipoFactura] = 'C' 
         AND {SPS_FACTURAS}.[NomUsrIns] <> 'WS_Faturacao'
         AND {SPS_FACTURAS}.[IsPurged] = 1 THEN (SELECT COUNT(DISTINCT NUMFICH)
                                                   FROM {SPS_HISTLINFACT} histlin
                                                  WHERE histlin.[IdCodFact] = {SPS_FACTURAS}.[IdCodFact])
        WHEN {SPS_FACTURAS}.[TipoFactura] = 'C' 
         AND {SPS_FACTURAS}.[NomUsrIns] = 'WS_Faturacao' 
                                           THEN (SELECT COUNT(DISTINCT NUMFICH)
                                                   FROM {SPS_LINFACTWS} linWS
                                                  WHERE linWS.[IdCodFact] = {SPS_FACTURAS}.[IdCodFact])
        END

有没有办法可以优化它?

提前多多感谢, 文森特科尔帕

0 个答案:

没有答案