Erro no Group by (alguem me ajude)
Select O.RAZAO_SOCIAL AS CAMPO1,--Campo1
--Campo 2
(SELECT (COALESCE(SUM(GL.CONT_PAT_APOSEN),0) +
COALESCE(SUM(GL.CONT_PAT_ATIVOS),0) +
COALESCE(SUM(GL.CONT_PAT_DOENCA),0) +
COALESCE(SUM(GL.CONT_PAT_MATERN),0) +
COALESCE(SUM(GL.CONT_PAT_PENSIO),0))
FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1
WHERE GP.ID_GUIA_LANCAMEN = GL1.ID_GUIA
AND GL.MES = GL1.MES) AS CAMPO2,
--Campo 3
(SELECT (COALESCE(SUM(GP.CONT_PAT_APOSEN),0) +
COALESCE(SUM(GP.CONT_PAT_ATIVOS),0) +
COALESCE(SUM(GP.CONT_PAT_DOENCA),0) +
COALESCE(SUM(GP.CONT_PAT_MATERN),0) +
COALESCE(SUM(GP.CONT_PAT_PENSIO),0))
FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1
WHERE GP.ID_GUIA_LANCAMEN = GL1.ID_GUIA
AND GL.MES = GL1.MES) AS CAMPO3,
--Campo 4
(SELECT (COALESCE(SUM(GB.CONT_PAT_APOSEN),0) +
COALESCE(SUM(GB.CONT_PAT_ATIVOS),0) +
COALESCE(SUM(GB.CONT_PAT_DOENCA),0) +
COALESCE(SUM(GB.CONT_PAT_MATERN),0) +
COALESCE(SUM(GB.CONT_PAT_PENSIO),0))
FROM GUIA_BAIXA GB, GUIA_LANCAMENTO GL1
WHERE GB.ID_GUIA = GL1.ID_GUIA
AND GL.MES = GL1.MES) AS CAMPO4
--Campo5 (CAMPO 1 - CAMPO 2 - CAMPO3)
FROM ORGAO O, GUIA_LANCAMENTO GL
WHERE GL.ANO_COMPETENCIA = 2011
AND GL.ID_ORGAO = O.ID_ORGAO
GROUP BY CAMPO1, CAMPO2, CAMPO3, CAMPO4
Ja tentei ordenar de varias outras formas e todas estão dando erros alguem sabe como consertar?
--Campo 2
(SELECT (COALESCE(SUM(GL.CONT_PAT_APOSEN),0) +
COALESCE(SUM(GL.CONT_PAT_ATIVOS),0) +
COALESCE(SUM(GL.CONT_PAT_DOENCA),0) +
COALESCE(SUM(GL.CONT_PAT_MATERN),0) +
COALESCE(SUM(GL.CONT_PAT_PENSIO),0))
FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1
WHERE GP.ID_GUIA_LANCAMEN = GL1.ID_GUIA
AND GL.MES = GL1.MES) AS CAMPO2,
--Campo 3
(SELECT (COALESCE(SUM(GP.CONT_PAT_APOSEN),0) +
COALESCE(SUM(GP.CONT_PAT_ATIVOS),0) +
COALESCE(SUM(GP.CONT_PAT_DOENCA),0) +
COALESCE(SUM(GP.CONT_PAT_MATERN),0) +
COALESCE(SUM(GP.CONT_PAT_PENSIO),0))
FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1
WHERE GP.ID_GUIA_LANCAMEN = GL1.ID_GUIA
AND GL.MES = GL1.MES) AS CAMPO3,
--Campo 4
(SELECT (COALESCE(SUM(GB.CONT_PAT_APOSEN),0) +
COALESCE(SUM(GB.CONT_PAT_ATIVOS),0) +
COALESCE(SUM(GB.CONT_PAT_DOENCA),0) +
COALESCE(SUM(GB.CONT_PAT_MATERN),0) +
COALESCE(SUM(GB.CONT_PAT_PENSIO),0))
FROM GUIA_BAIXA GB, GUIA_LANCAMENTO GL1
WHERE GB.ID_GUIA = GL1.ID_GUIA
AND GL.MES = GL1.MES) AS CAMPO4
--Campo5 (CAMPO 1 - CAMPO 2 - CAMPO3)
FROM ORGAO O, GUIA_LANCAMENTO GL
WHERE GL.ANO_COMPETENCIA = 2011
AND GL.ID_ORGAO = O.ID_ORGAO
GROUP BY CAMPO1, CAMPO2, CAMPO3, CAMPO4
Ja tentei ordenar de varias outras formas e todas estão dando erros alguem sabe como consertar?
Themer Batista
Curtidas 0
Melhor post
Junior Miranda
25/02/2011
Esse campo 5 é so um comentario manolo, meu problema mesmo é a merda do GROUP By que não da certo de jeito nenhum.
O colegar Wilson usou parte do tempo dele para tentar lhe ajudar! Então, vamos ter calma! Acertar ou errar, são consequências. Quanto ao erro... vamos a uma tradução tosca e direta da mensagem... "Não use funções Agregadas como o SUM no group by".
[]'s
GOSTEI 1
Mais Respostas
Wilson Junior
24/02/2011
Qual a versão do Firebird você está utilizando e qual o erro que aparece?
Aguardo retorno.
Aguardo retorno.
GOSTEI 0
Themer Batista
24/02/2011
A versão do Firebird é 2.5 o erro é este: Invalid token.Dynamic SQL Error.SQL error code = -104.Cannot use an aggregate function in a GROUP BY clause.
Eu ja tentei passando todos os tipos de group by, tentei usando id das tebelas que tenho e tal.
Eu ja tentei passando todos os tipos de group by, tentei usando id das tebelas que tenho e tal.
GOSTEI 0
Wilson Junior
24/02/2011
Agora que vi, o Firebird não suporta colocar isto
Espero ter colaborado.
--Campo5 (CAMPO 1 - CAMPO 2 - CAMPO3)
Espero ter colaborado.
GOSTEI 0
Themer Batista
24/02/2011
Esse campo 5 é so um comentario manolo, meu problema mesmo é a merda do GROUP By que não da certo de jeito nenhum.
GOSTEI 0
Wilson Junior
24/02/2011
Sim, eu me passei...me desculpe...
Bom, vc não possui nenhuma rotina de agrupamento (SUM, AVG, etc) para efetuar o groupy by, por isto ele diz que está incorreto. Vc pode ateh falar que os seus subselects utilizam, mas para vc entender melhor, o subselect é um processo separado que retorna um valor. Sugiro vc colocar um SUM antes de cada subselect e mandar agrupar somente pelo Campo1.
Espero ter colaborado.
Bom, vc não possui nenhuma rotina de agrupamento (SUM, AVG, etc) para efetuar o groupy by, por isto ele diz que está incorreto. Vc pode ateh falar que os seus subselects utilizam, mas para vc entender melhor, o subselect é um processo separado que retorna um valor. Sugiro vc colocar um SUM antes de cada subselect e mandar agrupar somente pelo Campo1.
Select O.RAZAO_SOCIAL AS CAMPO1, --Campo 2 SUM(SELECT (COALESCE(SUM(GL.CONT_PAT_APOSEN),0) + COALESCE(SUM(GL.CONT_PAT_ATIVOS),0) + COALESCE(SUM(GL.CONT_PAT_DOENCA),0) + COALESCE(SUM(GL.CONT_PAT_MATERN),0) + COALESCE(SUM(GL.CONT_PAT_PENSIO),0)) FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1 WHERE GP.ID_GUIA_LANCAMEN = GL1.ID_GUIA AND GL.MES = GL1.MES) AS CAMPO2, --Campo 3 SUM(SELECT (COALESCE(SUM(GP.CONT_PAT_APOSEN),0) + COALESCE(SUM(GP.CONT_PAT_ATIVOS),0) + COALESCE(SUM(GP.CONT_PAT_DOENCA),0) + COALESCE(SUM(GP.CONT_PAT_MATERN),0) + COALESCE(SUM(GP.CONT_PAT_PENSIO),0)) FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1 WHERE GP.ID_GUIA_LANCAMEN = GL1.ID_GUIA AND GL.MES = GL1.MES) AS CAMPO3, --Campo 4 SUM(SELECT (COALESCE(SUM(GB.CONT_PAT_APOSEN),0) + COALESCE(SUM(GB.CONT_PAT_ATIVOS),0) + COALESCE(SUM(GB.CONT_PAT_DOENCA),0) + COALESCE(SUM(GB.CONT_PAT_MATERN),0) + COALESCE(SUM(GB.CONT_PAT_PENSIO),0)) FROM GUIA_BAIXA GB, GUIA_LANCAMENTO GL1 WHERE GB.ID_GUIA = GL1.ID_GUIA AND GL.MES = GL1.MES) AS CAMPO4 --Campo5 (CAMPO 1 - CAMPO 2 - CAMPO3) FROM ORGAO O, GUIA_LANCAMENTO GL WHERE GL.ANO_COMPETENCIA = 2011 AND GL.ID_ORGAO = O.ID_ORGAO GROUP BY CAMPO1
Espero ter colaborado.
GOSTEI 1
Themer Batista
24/02/2011
Junior eu sei e sou bem grato pelos favores que eu recebo, não quis ser grosso nem mau agressivo.
Mas o codigo continua com erro, da erro no group by :(
GOSTEI 1
Wilson Junior
24/02/2011
Onde indiquei não serião GL1 ?
Caso não seja, coloque aqui a estrutura das suas tabelas e resultado que espera obter.
Quanto aos seus comentários, prefiro nem entrar em detalhes, pois estamos aqui sempre para COLABORAR e não para ATRAPALHAR ou PREJUDICAR.
Espero ter colaborado.
--Campo 2 (SELECT (COALESCE(SUM(GL.CONT_PAT_APOSEN),0) + COALESCE(SUM(GL.CONT_PAT_ATIVOS),0) + COALESCE(SUM(GL.CONT_PAT_DOENCA),0) + COALESCE(SUM(GL.CONT_PAT_MATERN),0) + COALESCE(SUM(GL.CONT_PAT_PENSIO),0)) FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1 WHERE GP.ID_GUIA_LANCAMEN = GL1.ID_GUIA AND GL.MES = GL1.MES) AS CAMPO2,
Caso não seja, coloque aqui a estrutura das suas tabelas e resultado que espera obter.
Quanto aos seus comentários, prefiro nem entrar em detalhes, pois estamos aqui sempre para COLABORAR e não para ATRAPALHAR ou PREJUDICAR.
Espero ter colaborado.
GOSTEI 0
Emerson Nascimento
24/02/2011
deixa eu atravessar as respostas dos colegas....
o que você espera como resultado para essa query ?
o que você espera como resultado para essa query ?
GOSTEI 0
Themer Batista
24/02/2011
Eu estou fazendo consultas de um relatorio para eu passar para o IREPORT e desenhalo por isso to jogando nos campos, o relatorio é a soma de alguns itens que tenho na tabela guia_lancamento essas guias são lançadas com um orgão, ao entender da logica que o cara que eu trabalho ta precisando é o seguinte, vc lança a guai na tabela guia de lançamentos GL vc paga algum valor dessa guia na tabela guia de pagamentos GP e da baixa em alguns valores que são pagos pela prefeitura na guia_baixa GB tanto que meu campo 5 seria gl - (gp+gb).
Desde já Obrigado aos que tem me ajudado.
Desde já Obrigado aos que tem me ajudado.
GOSTEI 0
Themer Batista
24/02/2011
COnsegui fazer ficou da seguinte forma.
SELECT GL.MES, GL.ID_ORGAO, O.NOME_FANTASIA AS CAMPO1, (COALESCE(SUM(GL.CONT_PAT_APOSEN),0)+ COALESCE(SUM(GL.CONT_PAT_ATIVOS),0)+ COALESCE(SUM(GL.CONT_PAT_DOENCA),0)+ COALESCE(SUM(GL.CONT_PAT_MATERN),0)+ COALESCE(SUM(GL.CONT_PAT_PENSIO),0)) AS CAMPO2, --CAMPO1 (SELECT COALESCE(SUM(GP.CONT_PAT_APOSEN),0)+ COALESCE(SUM(GP.CONT_PAT_ATIVOS),0)+ COALESCE(SUM(GP.CONT_PAT_DOENCA),0)+ COALESCE(SUM(GP.CONT_PAT_MATERN),0)+ COALESCE(SUM(GP.CONT_PAT_PENSIO),0) FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1 WHERE GL1.ID_GUIA = GP.ID_GUIA_LANCAMEN AND GL.ID_ORGAO = GL1.ID_ORGAO AND GL.MES = GL1.MES) AS CAMPO3,
(SELECT COALESCE(SUM(GB.CONT_PAT_APOSEN),0)+ COALESCE(SUM(GB.CONT_PAT_ATIVOS),0)+ COALESCE(SUM(GB.CONT_PAT_DOENCA),0)+ COALESCE(SUM(GB.CONT_PAT_MATERN),0)+ COALESCE(SUM(GB.CONT_PAT_PENSIO),0) FROM GUIA_BAIXA GB, GUIA_LANCAMENTO GL1 WHERE GB.ID_GUIA = GL1.ID_GUIA AND GL.ID_ORGAO = GL1.ID_ORGAO AND GL.MES = GL1.MES) AS CAMPO4, ((COALESCE(SUM(GL.CONT_PAT_APOSEN),0)+ COALESCE(SUM(GL.CONT_PAT_ATIVOS),0)+ COALESCE(SUM(GL.CONT_PAT_DOENCA),0)+ COALESCE(SUM(GL.CONT_PAT_MATERN),0)+ COALESCE(SUM(GL.CONT_PAT_PENSIO),0)) - --CAMPO1 (SELECT COALESCE(SUM(GP.CONT_PAT_APOSEN),0)+ COALESCE(SUM(GP.CONT_PAT_ATIVOS),0)+ COALESCE(SUM(GP.CONT_PAT_DOENCA),0)+ COALESCE(SUM(GP.CONT_PAT_MATERN),0)+ COALESCE(SUM(GP.CONT_PAT_PENSIO),0) FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1 WHERE GL1.ID_GUIA = GP.ID_GUIA_LANCAMEN AND GL.ID_ORGAO = GL1.ID_ORGAO) -
(SELECT COALESCE(SUM(GB.CONT_PAT_APOSEN),0)+ COALESCE(SUM(GB.CONT_PAT_ATIVOS),0)+ COALESCE(SUM(GB.CONT_PAT_DOENCA),0)+ COALESCE(SUM(GB.CONT_PAT_MATERN),0)+ COALESCE(SUM(GB.CONT_PAT_PENSIO),0) FROM GUIA_BAIXA GB, GUIA_LANCAMENTO GL1 WHERE GB.ID_GUIA = GL1.ID_GUIA AND GL.ID_ORGAO = GL1.ID_ORGAO)) AS CAMPO5
FROM GUIA_LANCAMENTO GL, ORGAO O WHERE GL.ANO_COMPETENCIA = 2009 AND GL.ID_ORGAO = O.ID_ORGAO AND O.NOME_FANTASIA = 'PREFEITURA DE MODELO'GROUP BY GL.ID_ORGAO, CAMPO1, GL.MES
SELECT GL.MES, GL.ID_ORGAO, O.NOME_FANTASIA AS CAMPO1, (COALESCE(SUM(GL.CONT_PAT_APOSEN),0)+ COALESCE(SUM(GL.CONT_PAT_ATIVOS),0)+ COALESCE(SUM(GL.CONT_PAT_DOENCA),0)+ COALESCE(SUM(GL.CONT_PAT_MATERN),0)+ COALESCE(SUM(GL.CONT_PAT_PENSIO),0)) AS CAMPO2, --CAMPO1 (SELECT COALESCE(SUM(GP.CONT_PAT_APOSEN),0)+ COALESCE(SUM(GP.CONT_PAT_ATIVOS),0)+ COALESCE(SUM(GP.CONT_PAT_DOENCA),0)+ COALESCE(SUM(GP.CONT_PAT_MATERN),0)+ COALESCE(SUM(GP.CONT_PAT_PENSIO),0) FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1 WHERE GL1.ID_GUIA = GP.ID_GUIA_LANCAMEN AND GL.ID_ORGAO = GL1.ID_ORGAO AND GL.MES = GL1.MES) AS CAMPO3,
(SELECT COALESCE(SUM(GB.CONT_PAT_APOSEN),0)+ COALESCE(SUM(GB.CONT_PAT_ATIVOS),0)+ COALESCE(SUM(GB.CONT_PAT_DOENCA),0)+ COALESCE(SUM(GB.CONT_PAT_MATERN),0)+ COALESCE(SUM(GB.CONT_PAT_PENSIO),0) FROM GUIA_BAIXA GB, GUIA_LANCAMENTO GL1 WHERE GB.ID_GUIA = GL1.ID_GUIA AND GL.ID_ORGAO = GL1.ID_ORGAO AND GL.MES = GL1.MES) AS CAMPO4, ((COALESCE(SUM(GL.CONT_PAT_APOSEN),0)+ COALESCE(SUM(GL.CONT_PAT_ATIVOS),0)+ COALESCE(SUM(GL.CONT_PAT_DOENCA),0)+ COALESCE(SUM(GL.CONT_PAT_MATERN),0)+ COALESCE(SUM(GL.CONT_PAT_PENSIO),0)) - --CAMPO1 (SELECT COALESCE(SUM(GP.CONT_PAT_APOSEN),0)+ COALESCE(SUM(GP.CONT_PAT_ATIVOS),0)+ COALESCE(SUM(GP.CONT_PAT_DOENCA),0)+ COALESCE(SUM(GP.CONT_PAT_MATERN),0)+ COALESCE(SUM(GP.CONT_PAT_PENSIO),0) FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1 WHERE GL1.ID_GUIA = GP.ID_GUIA_LANCAMEN AND GL.ID_ORGAO = GL1.ID_ORGAO) -
(SELECT COALESCE(SUM(GB.CONT_PAT_APOSEN),0)+ COALESCE(SUM(GB.CONT_PAT_ATIVOS),0)+ COALESCE(SUM(GB.CONT_PAT_DOENCA),0)+ COALESCE(SUM(GB.CONT_PAT_MATERN),0)+ COALESCE(SUM(GB.CONT_PAT_PENSIO),0) FROM GUIA_BAIXA GB, GUIA_LANCAMENTO GL1 WHERE GB.ID_GUIA = GL1.ID_GUIA AND GL.ID_ORGAO = GL1.ID_ORGAO)) AS CAMPO5
FROM GUIA_LANCAMENTO GL, ORGAO O WHERE GL.ANO_COMPETENCIA = 2009 AND GL.ID_ORGAO = O.ID_ORGAO AND O.NOME_FANTASIA = 'PREFEITURA DE MODELO'GROUP BY GL.ID_ORGAO, CAMPO1, GL.MES
GOSTEI 0
Emerson Nascimento
24/02/2011
isso vai funcionar mesmo? o relacionamento das subselects está correto?
pela minha leitura os valores podem dar errado, pois da forma como está você terá valores errados caso o mesmo órgão tenha lançamentos em anos diferentes, visto que você relacionou as subselects somente ao órgao.
essa instrução que estou te passando relaciona também ao mês e ao ano.
SELECT GL.MES, GL.ID_ORGAO,
O.NOME_FANTASIA AS CAMPO1,
(COALESCE(SUM(GL.CONT_PAT_APOSEN),0)+
COALESCE(SUM(GL.CONT_PAT_ATIVOS),0)+
COALESCE(SUM(GL.CONT_PAT_DOENCA),0)+
COALESCE(SUM(GL.CONT_PAT_MATERN),0)+
COALESCE(SUM(GL.CONT_PAT_PENSIO),0)) AS CAMPO2,
(SELECT COALESCE(SUM(GP.CONT_PAT_APOSEN),0)+
COALESCE(SUM(GP.CONT_PAT_ATIVOS),0)+
COALESCE(SUM(GP.CONT_PAT_DOENCA),0)+
COALESCE(SUM(GP.CONT_PAT_MATERN),0)+
COALESCE(SUM(GP.CONT_PAT_PENSIO),0)
FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1
WHERE GL1.ID_GUIA = GP.ID_GUIA_LANCAMEN
AND GL1.ID_ORGAO = GL.ID_ORGAO
AND GL1.ANO_COMPETENCIA = GL.ANO_COMPETENCIA
AND GL1.MES = GL.MES) AS CAMPO3,
(SELECT COALESCE(SUM(GB.CONT_PAT_APOSEN),0)+
COALESCE(SUM(GB.CONT_PAT_ATIVOS),0)+
COALESCE(SUM(GB.CONT_PAT_DOENCA),0)+
COALESCE(SUM(GB.CONT_PAT_MATERN),0)+
COALESCE(SUM(GB.CONT_PAT_PENSIO),0)
FROM GUIA_BAIXA GB, GUIA_LANCAMENTO GL1
WHERE GB.ID_GUIA = GL1.ID_GUIA
AND GL1.ID_ORGAO = GL.ID_ORGAO
AND GL1.ANO_COMPETENCIA = GL.ANO_COMPETENCIA
AND GL1.MES = GL.MES) AS CAMPO4,
((COALESCE(SUM(GL.CONT_PAT_APOSEN),0)+
COALESCE(SUM(GL.CONT_PAT_ATIVOS),0)+
COALESCE(SUM(GL.CONT_PAT_DOENCA),0)+
COALESCE(SUM(GL.CONT_PAT_MATERN),0)+
COALESCE(SUM(GL.CONT_PAT_PENSIO),0)) -
(SELECT COALESCE(SUM(GP.CONT_PAT_APOSEN),0)+
COALESCE(SUM(GP.CONT_PAT_ATIVOS),0)+
COALESCE(SUM(GP.CONT_PAT_DOENCA),0)+
COALESCE(SUM(GP.CONT_PAT_MATERN),0)+
COALESCE(SUM(GP.CONT_PAT_PENSIO),0)
FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1
WHERE GL1.ID_GUIA = GP.ID_GUIA_LANCAMEN
AND GL1.ID_ORGAO = GL.ID_ORGAO
AND GL1.ANO_COMPETENCIA = GL.ANO_COMPETENCIA
AND GL1.MES = GL.MES) -
(SELECT COALESCE(SUM(GB.CONT_PAT_APOSEN),0)+
COALESCE(SUM(GB.CONT_PAT_ATIVOS),0)+
COALESCE(SUM(GB.CONT_PAT_DOENCA),0)+
COALESCE(SUM(GB.CONT_PAT_MATERN),0)+
COALESCE(SUM(GB.CONT_PAT_PENSIO),0)
FROM GUIA_BAIXA GB, GUIA_LANCAMENTO GL1
WHERE GB.ID_GUIA = GL1.ID_GUIA
AND GL1.ID_ORGAO = GL.ID_ORGAO
AND GL1.ANO_COMPETENCIA = GL.ANO_COMPETENCIA
AND GL1.MES = GL.MES)
) AS CAMPO5
FROM GUIA_LANCAMENTO GL, ORGAO O
WHERE GL.ANO_COMPETENCIA = 2009
AND GL.ID_ORGAO = O.ID_ORGAO
AND O.NOME_FANTASIA = 'PREFEITURA DE MODELO'
GROUP BY GL.ID_ORGAO, GL.ANO_COMPETENCIA, O.NOME_FANTASIA, GL.MES
outra coisa que eu evitaria seria gerar esse campo 5. você está gastando recursos do SGBDR à toa, visto que pode fazer a conta ao imprimir o relatório, evitando, assim, desperdício de recursos.
pela minha leitura os valores podem dar errado, pois da forma como está você terá valores errados caso o mesmo órgão tenha lançamentos em anos diferentes, visto que você relacionou as subselects somente ao órgao.
essa instrução que estou te passando relaciona também ao mês e ao ano.
SELECT GL.MES, GL.ID_ORGAO,
O.NOME_FANTASIA AS CAMPO1,
(COALESCE(SUM(GL.CONT_PAT_APOSEN),0)+
COALESCE(SUM(GL.CONT_PAT_ATIVOS),0)+
COALESCE(SUM(GL.CONT_PAT_DOENCA),0)+
COALESCE(SUM(GL.CONT_PAT_MATERN),0)+
COALESCE(SUM(GL.CONT_PAT_PENSIO),0)) AS CAMPO2,
(SELECT COALESCE(SUM(GP.CONT_PAT_APOSEN),0)+
COALESCE(SUM(GP.CONT_PAT_ATIVOS),0)+
COALESCE(SUM(GP.CONT_PAT_DOENCA),0)+
COALESCE(SUM(GP.CONT_PAT_MATERN),0)+
COALESCE(SUM(GP.CONT_PAT_PENSIO),0)
FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1
WHERE GL1.ID_GUIA = GP.ID_GUIA_LANCAMEN
AND GL1.ID_ORGAO = GL.ID_ORGAO
AND GL1.ANO_COMPETENCIA = GL.ANO_COMPETENCIA
AND GL1.MES = GL.MES) AS CAMPO3,
(SELECT COALESCE(SUM(GB.CONT_PAT_APOSEN),0)+
COALESCE(SUM(GB.CONT_PAT_ATIVOS),0)+
COALESCE(SUM(GB.CONT_PAT_DOENCA),0)+
COALESCE(SUM(GB.CONT_PAT_MATERN),0)+
COALESCE(SUM(GB.CONT_PAT_PENSIO),0)
FROM GUIA_BAIXA GB, GUIA_LANCAMENTO GL1
WHERE GB.ID_GUIA = GL1.ID_GUIA
AND GL1.ID_ORGAO = GL.ID_ORGAO
AND GL1.ANO_COMPETENCIA = GL.ANO_COMPETENCIA
AND GL1.MES = GL.MES) AS CAMPO4,
((COALESCE(SUM(GL.CONT_PAT_APOSEN),0)+
COALESCE(SUM(GL.CONT_PAT_ATIVOS),0)+
COALESCE(SUM(GL.CONT_PAT_DOENCA),0)+
COALESCE(SUM(GL.CONT_PAT_MATERN),0)+
COALESCE(SUM(GL.CONT_PAT_PENSIO),0)) -
(SELECT COALESCE(SUM(GP.CONT_PAT_APOSEN),0)+
COALESCE(SUM(GP.CONT_PAT_ATIVOS),0)+
COALESCE(SUM(GP.CONT_PAT_DOENCA),0)+
COALESCE(SUM(GP.CONT_PAT_MATERN),0)+
COALESCE(SUM(GP.CONT_PAT_PENSIO),0)
FROM GUIA_PAGAMENTO GP, GUIA_LANCAMENTO GL1
WHERE GL1.ID_GUIA = GP.ID_GUIA_LANCAMEN
AND GL1.ID_ORGAO = GL.ID_ORGAO
AND GL1.ANO_COMPETENCIA = GL.ANO_COMPETENCIA
AND GL1.MES = GL.MES) -
(SELECT COALESCE(SUM(GB.CONT_PAT_APOSEN),0)+
COALESCE(SUM(GB.CONT_PAT_ATIVOS),0)+
COALESCE(SUM(GB.CONT_PAT_DOENCA),0)+
COALESCE(SUM(GB.CONT_PAT_MATERN),0)+
COALESCE(SUM(GB.CONT_PAT_PENSIO),0)
FROM GUIA_BAIXA GB, GUIA_LANCAMENTO GL1
WHERE GB.ID_GUIA = GL1.ID_GUIA
AND GL1.ID_ORGAO = GL.ID_ORGAO
AND GL1.ANO_COMPETENCIA = GL.ANO_COMPETENCIA
AND GL1.MES = GL.MES)
) AS CAMPO5
FROM GUIA_LANCAMENTO GL, ORGAO O
WHERE GL.ANO_COMPETENCIA = 2009
AND GL.ID_ORGAO = O.ID_ORGAO
AND O.NOME_FANTASIA = 'PREFEITURA DE MODELO'
GROUP BY GL.ID_ORGAO, GL.ANO_COMPETENCIA, O.NOME_FANTASIA, GL.MES
outra coisa que eu evitaria seria gerar esse campo 5. você está gastando recursos do SGBDR à toa, visto que pode fazer a conta ao imprimir o relatório, evitando, assim, desperdício de recursos.
GOSTEI 0