Colocar Function em um join

29/11/2013

0

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
Pjava

Pjava

Responder

Posts

29/11/2013

Pjava

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.
Responder

30/11/2013

Roniere Almeida

show bola, vlw por retornar com a solução.
Responder

01/12/2013

Mariana Carvalho

poxa, um extenso o select com join.
Responder

03/12/2013

Rodrigo Lacerda

Complicado, eu mesmo não sabia dessa do sum conseguir "desbugar" hahaha
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar