Boa noite,
Se eu entendi bem o "loop", normalmente é devido a um erro no relacionamento entre tabelas ( faltar chaves nos relacionamentos). porem em minha instalação não utilizamos essas tabelas, mas arrisco este palpite:
SELECT
TORCAMENTO.CODCOLIGADA AS COLIGADA,
(CASE WHEN MONTH(TITMPERIODOORCAMENTO.DATAFIM) = 1 THEN '01 - JAN'
WHEN MONTH(TITMPERIODOORCAMENTO.DATAFIM) = 2 THEN '02 - FEV'
WHEN MONTH(TITMPERIODOORCAMENTO.DATAFIM) = 3 THEN '03 - MAR'
WHEN MONTH(TITMPERIODOORCAMENTO.DATAFIM) = 4 THEN '04 - ABR'
WHEN MONTH(TITMPERIODOORCAMENTO.DATAFIM) = 5 THEN '05 - MAI'
WHEN MONTH(TITMPERIODOORCAMENTO.DATAFIM) = 6 THEN '06 - JUN'
WHEN MONTH(TITMPERIODOORCAMENTO.DATAFIM) = 7 THEN '07 - JUL'
WHEN MONTH(TITMPERIODOORCAMENTO.DATAFIM) = 8 THEN '08 - AGO'
WHEN MONTH(TITMPERIODOORCAMENTO.DATAFIM) = 9 THEN '09 - SET'
WHEN MONTH(TITMPERIODOORCAMENTO.DATAFIM) = 10 THEN '10 - OUT'
WHEN MONTH(TITMPERIODOORCAMENTO.DATAFIM) = 11 THEN '11 - NOV'
WHEN MONTH(TITMPERIODOORCAMENTO.DATAFIM) = 12 THEN '12 - DEZ'
END) MES,
/*DATEPART (MONTH,TITMPERIODOORCAMENTO.DATAFIM) AS MES,*/
DATEPART (YEAR,TITMPERIODOORCAMENTO.DATAFIM) AS ANO,
TORCAMENTO.CODCCUSTO + ' - '+ GCCUSTO.NOME AS CENTRO_CUSTO,
TORCAMENTO.CODTBORCAMENTO + ' - ' + TTBORCAMENTO.DESCRICAO AS CLASSIFICACAO,
0 AS NF,
TITMORCAMENTO.VALOREXCEDENTE AS EXCEDENTE,
TITMORCAMENTO.VALORORCADO AS ORCADO,
(TITMORCAMENTO.VALORORCADO - FLANRATCCU.VALOR) AS SALDO,
0 AS REALIZADO
FROM
TORCAMENTO(NOLOCK)
INNER JOIN GCCUSTO (NOLOCK) ON GCCUSTO.CODCOLIGADA = TORCAMENTO.CODCOLIGADA AND GCCUSTO.CODCCUSTO = TORCAMENTO.CODCCUSTO
INNER JOIN TITMORCAMENTO (NOLOCK) ON TITMORCAMENTO.CODCOLIGADA = TORCAMENTO.CODCOLIGADA AND TITMORCAMENTO.IDORCAMENTO = TORCAMENTO.IDORCAMENTO
INNER JOIN TITMPERIODOORCAMENTO (NOLOCK) ON TITMPERIODOORCAMENTO.CODCOLIGADA = TITMORCAMENTO.CODCOLIGADA AND TITMPERIODOORCAMENTO.IDPERIODO = TITMORCAMENTO.IDPERIODO AND TITMPERIODOORCAMENTO.IDITMPERIODO = TITMORCAMENTO.IDITMPERIODO
INNER JOIN TTBORCAMENTO (NOLOCK) ON TTBORCAMENTO.CODCOLIGADA = TORCAMENTO.CODCOLTBORCAMENTO AND TTBORCAMENTO.CODTBORCAMENTO = TORCAMENTO.CODTBORCAMENTO
INNER JOIN FLANRATCCU (NOLOCK) ON FLANRATCCU.CODCOLIGADA = GCCUSTO.CODCOLIGADA AND FLANRATCCU.CODCCUSTO = GCCUSTO.CODCCUSTO
UNION ALL
SELECT
FLAN.CODCOLIGADA AS COLIGADA,
(CASE WHEN MONTH(DATABAIXA) = 1 THEN '01 - JAN'
WHEN MONTH(DATABAIXA) = 2 THEN '02 - FEV'
WHEN MONTH(DATABAIXA) = 3 THEN '03 - MAR'
WHEN MONTH(DATABAIXA) = 4 THEN '04 - ABR'
WHEN MONTH(DATABAIXA) = 5 THEN '05 - MAI'
WHEN MONTH(DATABAIXA) = 6 THEN '06 - JUN'
WHEN MONTH(DATABAIXA) = 7 THEN '07 - JUL'
WHEN MONTH(DATABAIXA) = 8 THEN '08 - AGO'
WHEN MONTH(DATABAIXA) = 9 THEN '09 - SET'
WHEN MONTH(DATABAIXA) = 10 THEN '10 - OUT'
WHEN MONTH(DATABAIXA) = 11 THEN '11 - NOV'
WHEN MONTH(DATABAIXA) = 12 THEN '12 - DEZ'
END) MES,
/*DATEPART (MONTH,DATABAIXA) AS MES, */
DATEPART (YEAR,DATABAIXA) AS ANO,
FLANRATCCU.CODCCUSTO+ ' - '+ GCCUSTO.NOME AS CENTRO_CUSTO,
FLANRATCCU.CODNATFINANCEIRA+ ' - ' + TTBORCAMENTO.DESCRICAO AS CLASIFICACAO,
FLAN.IDLAN AS NF,
0 AS EXCEDENTE,
0 AS ORCADO,
0 AS SALDO,
FLANRATCCU.VALOR AS REALIZADO
FROM
FLAN(NOLOCK)
INNER JOIN FLANRATCCU (NOLOCK) ON FLANRATCCU.IDLAN = FLAN.IDLAN AND FLANRATCCU.CODCOLIGADA = FLAN.CODCOLIGADA
INNER JOIN GCCUSTO (NOLOCK) ON GCCUSTO.CODCOLIGADA = FLAN.CODCOLIGADA AND GCCUSTO.CODCCUSTO = FLAN.CODCCUSTO
INNER JOIN TTBORCAMENTO (NOLOCK) ON TTBORCAMENTO.CODCOLIGADA = FLANRATCCU.CODCOLNATFINANCEIRA AND TTBORCAMENTO.CODTBORCAMENTO = FLANRATCCU.CODNATFINANCEIRA
WHERE
FLAN.STATUSLAN=1 AND
FLAN.PAGREC=2