Erro Group By | Agrupando por Mes
Amigos,
Criei a View Abaixo e logo apos o select usando a mesma.
O objetivo é agrupar os valores das contas por mes, podendo compara-los entre um mes e outro, numa mesma linha...
Sem a clausula
O select funciona, porem nao agrupa os meses, por exemplo:
Eu paguei 100 em janeiro, 200 em fevereiro e 300 e março. Eu quero que apareca tudo numa linha só. Atualmente está aparecendo 3 linhas cada uma com o valor do seu respectivo mes, porem para um mesmo grupo de conta...
Com a clausula do group by, dá o seguinte erro:
onde estou errando?
Criei a View Abaixo e logo apos o select usando a mesma.
O objetivo é agrupar os valores das contas por mes, podendo compara-los entre um mes e outro, numa mesma linha...
Sem a clausula
GROUP BY IDGRUPOCONTA, DESCRICAOGRUPOCONTA, TIPODEBITOCREDITO, FIXO, MES
O select funciona, porem nao agrupa os meses, por exemplo:
Eu paguei 100 em janeiro, 200 em fevereiro e 300 e março. Eu quero que apareca tudo numa linha só. Atualmente está aparecendo 3 linhas cada uma com o valor do seu respectivo mes, porem para um mesmo grupo de conta...
Com a clausula do group by, dá o seguinte erro:
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
onde estou errando?
CREATE VIEW VWFRMRELCPAGARRECEBERAGRUPADAS ( IDGRUPOCONTA, DESCRICAOGRUPOCONTA, TIPODEBITOCREDITO, FIXO, VALORPGTO, MES) AS SELECT CPR.IDGRUPOCONTA, GC.DESCRICAOGRUPOCONTA, GC.TIPODEBITOCREDITO, GC.FIXO, SUM(PCP.VALORPAGAMENTO) AS VALORPGTO, EXTRACT(MONTH FROM PCP.DATAPAGAMENTO) AS MES FROM CPAGARRECEBER CPR INNER JOIN PARCELACPAGAR PCP ON PCP.IDCPAGARRECEBER = CPR.IDCPAGARRECEBER INNER JOIN GRUPOCONTA GC ON GC.IDGRUPOCONTA = CPR.IDGRUPOCONTA INNER JOIN FORMAPGTO FP ON FP.IDFORMAPGTO = CPR.IDFORMAPGTO GROUP BY CPR.IDGRUPOCONTA, GC.DESCRICAOGRUPOCONTA, GC.TIPODEBITOCREDITO, GC.FIXO, EXTRACT(MONTH FROM PCP.DATAPAGAMENTO) ;
SELECT IDGRUPOCONTA, DESCRICAOGRUPOCONTA, TIPODEBITOCREDITO, FIXO, VALORPGTO, CASE MES WHEN ´1´ THEN VALORPGTO END AS VR_JAN, CASE MES WHEN ´2´ THEN VALORPGTO END AS VR_FEV, CASE MES WHEN ´3´ THEN VALORPGTO END AS VR_MAR, CASE MES WHEN ´4´ THEN VALORPGTO END AS VR_ABR, CASE MES WHEN ´5´ THEN VALORPGTO END AS VR_MAI, CASE MES WHEN ´6´ THEN VALORPGTO END AS VR_JUN, CASE MES WHEN ´7´ THEN VALORPGTO END AS VR_JUL, CASE MES WHEN ´8´ THEN VALORPGTO END AS VR_AGO, CASE MES WHEN ´9´ THEN VALORPGTO END AS VR_SET, CASE MES WHEN ´10´ THEN VALORPGTO END AS VR_OUT, CASE MES WHEN ´11´ THEN VALORPGTO END AS VR_NOV, CASE MES WHEN ´12´ THEN VALORPGTO END AS VR_DEZ FROM VWFRMRELCPAGARRECEBERAGRUPADAS WHERE MES IN (9, 10, 11) AND IDGRUPOCONTA IN (3, 9, 7, 1, 2, 6, 10, 5, 4, 8) GROUP BY IDGRUPOCONTA, DESCRICAOGRUPOCONTA, TIPODEBITOCREDITO, FIXO, MES
Rafaelunp
Curtidas 0
Respostas
Emerson Nascimento
11/10/2004
retire o GROUP BY da view.
GOSTEI 0
Rafaelunp
11/10/2004
retire o GROUP BY da view.
Se eu tirar o grrup by nao funciona... eu nao vou ter o mes, nem o somatorio...
GOSTEI 0
Afarias
11/10/2004
Qual o banco de dados??? O Interbase e o Firebird 1.0 não aceitam funções em um group by ::
group by EXTRACT(MONTH FROM PCP.DATAPAGAMENTO)
T+
group by EXTRACT(MONTH FROM PCP.DATAPAGAMENTO)
T+
GOSTEI 0
Rafaelunp
11/10/2004
Qual o banco de dados??? O Interbase e o Firebird 1.0 não aceitam funções em um group by ::
group by EXTRACT(MONTH FROM PCP.DATAPAGAMENTO)
T+
Cara do jeito que está, está funcionando... só nao do jeito que eu quero... vem assim:
DESCRIÇÃOJANEIRO FEVEREIRO MARÇO ALIMENTAÇÃO 100 ALIMENTAÇÃO 200 ALIMENTAÇÃO 300 FUNCIONARIOS 200 FUNCIONARIOS 250
Eu quero assim:
DESCRIÇÃOJANEIRO FEVEREIRO MARÇO ALIMENTAÇÃO 100 200 300 FUNCIONARIOS 200 250
GOSTEI 0
Afarias
11/10/2004
O SQL está retornando corretamente. Neste caso eu usaria um Procedimento ou mesmo deixaria da forma como está e apenas formataria os dados no cliente.
T+
T+
GOSTEI 0