Array
(
)

Colocar Function em um join

Pjava
   - 29 nov 2013

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
   - 29 nov 2013

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.

Roniere Almeida
   - 30 nov 2013

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

Mariana Carvalho
   - 01 dez 2013

poxa, um extenso o select com join.

Rodrigo Lacerda
   - 03 dez 2013

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