Usuário com melhor resposta
Erro com Group by na consulta

Pergunta
-
Prezados,
Estou enfrentando um "problema" com a consulta abaixo:
SELECT FLAN.MESDECOMPETENCIA AS REFERENCIA, FLAN.DATAVENCIMENTO AS VENCTO, FLAN.DATAPAG AS PAGTO, FLAN.VALORORIGINAL AS MENSAL, FLAN.VALORP1 AS BOLSA, FLAN.VALORMULTA AS ACRESCIMOS, FLAN.VALORDESCONTO AS DESCONTO, FLAN.VALORJUROS AS JUROS, FLAN.VALORBAIXADO AS VALOR_PAGO, SUM(FLAN.VALORORIGINAL-FLAN.VALOROP1+FLAN.VALORJUROS+FLAN.VALORMULTA) AS DEVIDO, SPARCELA.RA FROM FLAN (NOLOCK) LEFT JOIN FCFO (NOLOCK) ON FLAN.CODCOLCFO=FCFO.CODCOLIGADA AND FLAN.CODCFO=FCFO.CODCFO LEFT JOIN SLAN (NOLOCK) ON FLAN.IDLAN=SLAN.IDLAN AND FLAN.CODCOLIGADA=SLAN.CODCOLIGADA LEFT JOIN SPARCELA (NOLOCK) ON SLAN.CODCOLIGADA=SPARCELA.CODCOLIGADA AND SLAN.IDPARCELA=SPARCELA.IDPARCELA LEFT JOIN SRESPONSAVEL (NOLOCK) ON SPARCELA.CODCOLIGADA=SRESPONSAVEL.CODCOLIGADA AND SPARCELA.IDPARCELA=SRESPONSAVEL.IDPARCELA LEFT JOIN SALUNO (NOLOCK) ON SPARCELA.CODCOLIGADA=SALUNO.CODCOLIGADA AND SPARCELA.RA=SALUNO.RA LEFT JOIN PPESSOA (NOLOCK) ON SALUNO.CODPESSOA=PPESSOA.CODIGO WHERE SPARCELA.CODSERVICO IN (1,10,15,22,25,26,27,28,29,3,30,31,32,8,9) AND FCFO.NOMEFANTASIA LIKE '%'+(:NOME_S)+'%' AND SPARCELA.RA LIKE :ESPELHO#1 AND FLAN.DATAVENCIMENTO >= :DATAINICIAL_D AND FLAN.DATAVENCIMENTO <= :DATAFINAL_D AND FLAN.STATUSLAN=1 GROUP BY FLAN.DATAVENCIMENTO,SPARCELA.RA ORDER BY FLAN.DATAVENCIMENTO,SPARCELA.RA
e msg de erro é essa:
Mensagem 8120, Nível 16, Estado 1, Linha 3
Column 'FLAN.MESDECOMPETENCIA' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Poderiam me ajudar?
Obrigado.
Respostas
-
Chedisson,
A partir do momento em que voce coloca ao menos uma função de agregação na seu select ( No caso o SUM), todas as outras colunas que não estão em nenhuma função devem estar obrigatoriamente no group by. tente este select:
SELECT
FLAN
.MESDECOMPETENCIA AS REFERENCIA,
FLAN
.DATAVENCIMENTO AS VENCTO,
FLAN
.DATAPAG AS PAGTO,
FLAN
.VALORORIGINAL AS MENSAL,
FLAN
.VALORP1 AS BOLSA,
FLAN
.VALORMULTA AS ACRESCIMOS,
FLAN
.VALORDESCONTO AS DESCONTO,
FLAN
.VALORJUROS AS JUROS,
FLAN
.VALORBAIXADO AS VALOR_PAGO,
SUM
(FLAN.VALORORIGINAL-FLAN.VALOROP1+FLAN.VALORJUROS+FLAN.VALORMULTA) AS DEVIDO,
SPARCELA
.RA
FROM
FLAN
(NOLOCK)
LEFT
JOIN FCFO (NOLOCK) ON
FLAN
.CODCOLCFO=FCFO.CODCOLIGADA AND
FLAN
.CODCFO=FCFO.CODCFO
LEFT
JOIN SLAN (NOLOCK) ON
FLAN
.IDLAN=SLAN.IDLAN AND
FLAN
.CODCOLIGADA=SLAN.CODCOLIGADA
LEFT
JOIN SPARCELA (NOLOCK) ON
SLAN
.CODCOLIGADA=SPARCELA.CODCOLIGADA AND
SLAN
.IDPARCELA=SPARCELA.IDPARCELA
LEFT
JOIN SRESPONSAVEL (NOLOCK) ON
SPARCELA
.CODCOLIGADA=SRESPONSAVEL.CODCOLIGADA AND
SPARCELA
.IDPARCELA=SRESPONSAVEL.IDPARCELA
LEFT
JOIN SALUNO (NOLOCK) ON
SPARCELA
.CODCOLIGADA=SALUNO.CODCOLIGADA AND
SPARCELA
.RA=SALUNO.RA
LEFT
JOIN PPESSOA (NOLOCK) ON
SALUNO
.CODPESSOA=PPESSOA.CODIGO
WHERE
SPARCELA
.CODSERVICO IN (1,10,15,22,25,26,27,28,29,3,30,31,32,8,9) AND
FCFO
.NOMEFANTASIA LIKE '%'+(:NOME_S)+'%' AND
SPARCELA
.RA LIKE :ESPELHO#1 AND
FLAN
.DATAVENCIMENTO >= :DATAINICIAL_D AND
FLAN
.DATAVENCIMENTO <= :DATAFINAL_D AND
FLAN
.STATUSLAN=1
GROUP
BY FLAN.MESDECOMPETENCIA,
FLAN
.DATAVENCIMENTO,
FLAN
.DATAPAG,
FLAN
.VALORORIGINAL,
FLAN
.VALORP1,
FLAN
.VALORMULTA,
FLAN
.VALORDESCONTO,
FLAN
.VALORJUROS,
FLAN
.VALORBAIXADO,
SPARCELA
.RA
ORDER
BY FLAN.DATAVENCIMENTO,SPARCELA.RA
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
ITIL V3 Foundation
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Blog Empresa: www.tripletech.com.br/blog
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com- Sugerido como Resposta Alexandre Matayosi quarta-feira, 20 de fevereiro de 2013 14:43
- Marcado como Resposta Chédisson Soares quarta-feira, 20 de fevereiro de 2013 14:46
Todas as Respostas
-
Chedisson,
A partir do momento em que voce coloca ao menos uma função de agregação na seu select ( No caso o SUM), todas as outras colunas que não estão em nenhuma função devem estar obrigatoriamente no group by. tente este select:
SELECT
FLAN
.MESDECOMPETENCIA AS REFERENCIA,
FLAN
.DATAVENCIMENTO AS VENCTO,
FLAN
.DATAPAG AS PAGTO,
FLAN
.VALORORIGINAL AS MENSAL,
FLAN
.VALORP1 AS BOLSA,
FLAN
.VALORMULTA AS ACRESCIMOS,
FLAN
.VALORDESCONTO AS DESCONTO,
FLAN
.VALORJUROS AS JUROS,
FLAN
.VALORBAIXADO AS VALOR_PAGO,
SUM
(FLAN.VALORORIGINAL-FLAN.VALOROP1+FLAN.VALORJUROS+FLAN.VALORMULTA) AS DEVIDO,
SPARCELA
.RA
FROM
FLAN
(NOLOCK)
LEFT
JOIN FCFO (NOLOCK) ON
FLAN
.CODCOLCFO=FCFO.CODCOLIGADA AND
FLAN
.CODCFO=FCFO.CODCFO
LEFT
JOIN SLAN (NOLOCK) ON
FLAN
.IDLAN=SLAN.IDLAN AND
FLAN
.CODCOLIGADA=SLAN.CODCOLIGADA
LEFT
JOIN SPARCELA (NOLOCK) ON
SLAN
.CODCOLIGADA=SPARCELA.CODCOLIGADA AND
SLAN
.IDPARCELA=SPARCELA.IDPARCELA
LEFT
JOIN SRESPONSAVEL (NOLOCK) ON
SPARCELA
.CODCOLIGADA=SRESPONSAVEL.CODCOLIGADA AND
SPARCELA
.IDPARCELA=SRESPONSAVEL.IDPARCELA
LEFT
JOIN SALUNO (NOLOCK) ON
SPARCELA
.CODCOLIGADA=SALUNO.CODCOLIGADA AND
SPARCELA
.RA=SALUNO.RA
LEFT
JOIN PPESSOA (NOLOCK) ON
SALUNO
.CODPESSOA=PPESSOA.CODIGO
WHERE
SPARCELA
.CODSERVICO IN (1,10,15,22,25,26,27,28,29,3,30,31,32,8,9) AND
FCFO
.NOMEFANTASIA LIKE '%'+(:NOME_S)+'%' AND
SPARCELA
.RA LIKE :ESPELHO#1 AND
FLAN
.DATAVENCIMENTO >= :DATAINICIAL_D AND
FLAN
.DATAVENCIMENTO <= :DATAFINAL_D AND
FLAN
.STATUSLAN=1
GROUP
BY FLAN.MESDECOMPETENCIA,
FLAN
.DATAVENCIMENTO,
FLAN
.DATAPAG,
FLAN
.VALORORIGINAL,
FLAN
.VALORP1,
FLAN
.VALORMULTA,
FLAN
.VALORDESCONTO,
FLAN
.VALORJUROS,
FLAN
.VALORBAIXADO,
SPARCELA
.RA
ORDER
BY FLAN.DATAVENCIMENTO,SPARCELA.RA
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
ITIL V3 Foundation
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Blog Empresa: www.tripletech.com.br/blog
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com- Sugerido como Resposta Alexandre Matayosi quarta-feira, 20 de fevereiro de 2013 14:43
- Marcado como Resposta Chédisson Soares quarta-feira, 20 de fevereiro de 2013 14:46
-
Muito obrigado, Fabrizzio Caputo