none
Function em uma join RRS feed

  • Pergunta

  • Tenho uma função que me retorna um table. Preciso colocar em um join num select. Acontece, que como ela me retorna uma Table, como eu faço para pegar uma coluna dessa table e colocar num select onde a Table está joinada. Abaixo minha join e minha Function.

    use CONCILIACAO_V3
    SELECT TOP 10  
    NFIQtdContas  = ISNULL(COUNT(DISTINCT ACG.NR_GUIA_PRESTADOR),0)      
    , NFIQtdItens             = ISNULL(COUNT(DISTINCT RAC.ID_ITEM),0)      
    , NFIQtdRejeitados        = ISNULL(SUM(CASE WHEN CI.COD_STATUS_CONCILIA = 7 THEN 1 ELSE 0 END),0)      
    , NFIQtdEmAnalise         = ISNULL(SUM(CASE WHEN CI.COD_STATUS_CONCILIA = 6 THEN 1 ELSE 0 END),0)      
    , NFIQtdPagosParciais     = ISNULL(SUM(CASE WHEN CI.COD_STATUS_CONCILIA = 2 THEN 1 ELSE 0 END),0)      
    , NFIQtdPagosIntegrais    = ISNULL(SUM(CASE WHEN CI.COD_STATUS_CONCILIA = 1 THEN 1 ELSE 0 END),0)     
    , NFIQtdValorPagoMaior    = -999 ==>AQUI DEVE ENTRAR ESSE CAMPO Q VEM DA TABLE: FX.QTD_PAGO_MAIOR
        
    , NFIValorItens           = ISNULL(SUM(RAC.VL_TOT_COBRADO_ITEM),0)      
    , NFIValorRejeitados      = -999      
    , NFIValorEmAnalise       = -999      
    , NFIValorGlosado         = ISNULL(SUM(RAC.VL_TOT_GLOSA_ITEM),0)      
    , NFIValorPago            = ISNULL(SUM(RAC.VL_TOT_PAGO_ITEM),0)     
    , NFIValorPagosIntegrais  = -999      
    , NFIValorTotalRecuperado = -999      
    , NFIValorPagoMaior       = -999      
    , NFIValorSaldoGlosa      = -999      
    , NFIValorTotalPago       = -999 
    from RETORNO_ANALISE_CONTAS RAC WITH(NOLOCK) 
    left join FX_RETORNA_PAGO_MAIOR(2,5349611,1078718,48,51967) FX on FX.ID_Item = RAC.ID_ITEM
    inner JOIN AGRE_CONTA_GUIA ACG WITH(NOLOCK) ON rac.NR_GUIA_PRESTADOR = ACG.NR_GUIA_PRESTADOR 
    inner JOIN CONCILIA_ITEM CI with(nolock) ON CI.ID_LOTE = rac.ID_LOTE 
    AND CI.ID_CONTA = rac.ID_CONTA 
    AND CI.ID_ITEM = rac.ID_ITEM 
    WHERE CI.COD_STATUS_CONCILIA <> 10  
    AND RAC.COD_EMS = 48
    AND ACG.ID_PRESTADOR = 51967   
    --AND ID_PRESTADOR = 45972   
    AND RAC.ID_ITEM >= 2
    GROUP BY FX.QTD_PAGO_MAIOR

    AQUI ESTÁ MINHA FUNCTION:

    IF OBJECT_ID (N'DBO.FX_RETORNA_PAGO_MAIOR', N'FN') IS NOT NULL
        DROP FUNCTION DBO.FX_RETORNA_PAGO_MAIOR;
    GO

    CREATE FUNCTION DBO.FX_RETORNA_PAGO_MAIOR(@ID_ITEM INT,@ID_CONTA INT,@ID_LOTE INT, 
                                              @COD_EMS NUMERIC(3,0),@ID_PRESTADOR INT)
                                              
    RETURNS @RET TABLE(ID_ITEM INT,QTD_PAGO_MAIOR INT,VL_TOT_PAGO_ITEM NUMERIC(10,2)) 
    AS
    BEGIN

     DECLARE @VALOR NUMERIC(10,2);

     -- PEGA O TOTAL DE PAGAMENTOS DE RECURSO
     SELECT
    @VALOR = ISNULL(SUM(VL_TOT_PAGO_ITEM),0) 
     FROM 
    RETORNO_RECURSO_GLOSA
     WHERE 
    ID_ITEM      = @ID_ITEM      AND 
    ID_CONTA     = @ID_CONTA     AND
    ID_LOTE      = @ID_LOTE      AND
    COD_EMS      = @COD_EMS      AND
    ID_PRESTADOR = @ID_PRESTADOR;
     
     -- COMPARA COM O TOTAL DA VARIÁVEL PARA SABER SE HOUVE PAGO MAIOR OU NÃO
     INSERT INTO @RET

     SELECT ID_ITEM,
    ISNULL(SUM(CASE WHEN VL_TOT_GLOSA_ITEM < @VALOR 
              THEN 1 ELSE 0 END),0) AS QTD_PAGO_MAIOR,
    CASE WHEN SUM(VL_TOT_GLOSA_ITEM) < @VALOR 
              THEN @VALOR ELSE 0 END AS VALOR_PAGO_MAIOR
      FROM
        RETORNO_ANALISE_CONTAS
     WHERE 
    ID_ITEM      = @ID_ITEM      AND 
    ID_CONTA     = @ID_CONTA     AND
    ID_LOTE      = @ID_LOTE      AND
    COD_EMS      = @COD_EMS      AND
    ID_PRESTADOR = @ID_PRESTADOR
     GROUP BY ID_ITEM;

    RETURN

    END;

    GO
    sexta-feira, 29 de novembro de 2013 10:00

Respostas

  • Resolvido. Eu estva tendo problemas quando eu chamava o campo da Functio direto no select. Fiz um sum dele e resolveu. Antes eu estava tendo problemas com o group by que me obrigava a por. Agreguei o campo, não foi mais necessário o SUM() e ficamos de boa.

    ISNULL(SUM(fx.mecampo_aqui),0)

    Isso resolveu meu problema.

    sexta-feira, 29 de novembro de 2013 13:14