Jump to content
Viniciusr9

[Resolvido] ORA-00937: Não é uma função de grupo de grupo simples

Recommended Posts

Boa tarde pessoal,

Sei que tem varios tópicos sobre esse erro, porém analisei todos e nenhum foi aplicável ao meu caso ( a maioria era porquê o pessoal esquecia do Group By ao final das Querys) . 

Se alguém puder ajudar, agradeço . Os campos sem função estão inseridos no group by, porém o erro persiste .

 

 


 

SELECT * FROM(
select  
    LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA AS PROJETO,
    E.DS_EQUIPE as EQUIPE,
    SUM(NVL((CC.QT_HORAS_CHEIA - SUM(AU.DT_FIM - AU.DT_INI)*24 ),CC.QT_HORAS_CHEIA)) as "ESFORÇO CALCULADO"     
 from EQUIPE E,
    COLABORADOR C1,
    COMPETENCIA C,
    COMPETENCIA_COLABORADOR CC,
    AUSENCIAS AU
 where E.CD_EQUIPE=CC.CD_EQUIPE
    and C.CD_COMPETENCIA=CC.CD_COMPETENCIA
    and C1.CD_COLABORADOR=CC.CD_COLABORADOR
    and C1.STATUS = 1
    AND C1.CD_GESTOR <> C1.CD_COLABORADOR
    AND AU.CD_COLABORADOR (+) = C1.CD_COLABORADOR   
    GROUP BY E.DS_EQUIPE, LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA
) VT
WHERE VT.PROJETO = ((select to_char(sysdate, 'MM') from dual)||'/'||(select to_char(sysdate, 'RRRR') from dual))

 

Share this post


Link to post
Share on other sites
SELECT * FROM(
select  
    LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA AS PROJETO,
    E.DS_EQUIPE as EQUIPE,
    SUM(NVL((CC.QT_HORAS_CHEIA - SUM(AU.DT_FIM - AU.DT_INI)*24 ),CC.QT_HORAS_CHEIA)) as "ESFORÇO CALCULADO"     
 from EQUIPE E,
    COLABORADOR C1,
    COMPETENCIA C,
    COMPETENCIA_COLABORADOR CC,
    AUSENCIAS AU
 where E.CD_EQUIPE=CC.CD_EQUIPE
    and C.CD_COMPETENCIA=CC.CD_COMPETENCIA
    and C1.CD_COLABORADOR=CC.CD_COLABORADOR
    and C1.STATUS = 1
    AND C1.CD_GESTOR <> C1.CD_COLABORADOR
    AND AU.CD_COLABORADOR (+) = C1.CD_COLABORADOR   
    GROUP BY CC.QT_HORAS_CHEIA,U.DT_FIM,AU.DT_INI,E.DS_EQUIPE, LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA
) VT
WHERE VT.PROJETO = ((select to_char(sysdate, 'MM') from dual)||'/'||(select to_char(sysdate, 'RRRR') from dual))

 

Share this post


Link to post
Share on other sites
13 minutos atrás, Motta disse:

SELECT * FROM(
select  
    LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA AS PROJETO,
    E.DS_EQUIPE as EQUIPE,
    SUM(NVL((CC.QT_HORAS_CHEIA - SUM(AU.DT_FIM - AU.DT_INI)*24 ),CC.QT_HORAS_CHEIA)) as "ESFORÇO CALCULADO"     
 from EQUIPE E,
    COLABORADOR C1,
    COMPETENCIA C,
    COMPETENCIA_COLABORADOR CC,
    AUSENCIAS AU
 where E.CD_EQUIPE=CC.CD_EQUIPE
    and C.CD_COMPETENCIA=CC.CD_COMPETENCIA
    and C1.CD_COLABORADOR=CC.CD_COLABORADOR
    and C1.STATUS = 1
    AND C1.CD_GESTOR <> C1.CD_COLABORADOR
    AND AU.CD_COLABORADOR (+) = C1.CD_COLABORADOR   
    GROUP BY CC.QT_HORAS_CHEIA,U.DT_FIM,AU.DT_INI,E.DS_EQUIPE, LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA
) VT
WHERE VT.PROJETO = ((select to_char(sysdate, 'MM') from dual)||'/'||(select to_char(sysdate, 'RRRR') from dual))

 

Continua o mesmo erro , mesmo incluindo o AU.DT_FIM e DT_INI no group by..

Share this post


Link to post
Share on other sites

Tira os dt_fim e dt_ini do group by ...

 

Share this post


Link to post
Share on other sites

O erro persiste Motta. Pelo que eu tava lendo na net, eu não posso ter duas funções de grupo aninhadas do tipo :

SUM(NVL((CC.QT_HORAS_CHEIA - SUM(AU.DT_FIM - AU.DT_INI)*24 ),CC.QT_HORAS_CHEIA)) 

 

porém eu preciso dela pois eu preciso reduzir o QT_HORAS_CHEIA( horas totais)  de SUM(AU.DT_FIM - AU.DT_INI)*24 que são as horas faltadas pra ter um retorno de horas reais. o SUM de fora acumula tudo pra mim, sem ele dá tudo errado . 

Será que tem alguma maneira de converter isso e retirar um SUM porém tendo o mesmo retorno ?

Share this post


Link to post
Share on other sites

Tenta colocar as colunas

 

QT_HORAS_CHEIA
DT_FIM
DT_INI

 

na subquery sem totalizar e totalizar no select externo

Share this post


Link to post
Share on other sites

Desse jeito ? , assim me retorna apenas o resultado de 1501 , porém o correto que eu necessito é

( EQUIPE 1 = 1299

  EQUIPE 2 = 1010

  EQUIPE 3 = 147)

 

SELECt SUM(NVL((VT.QT_HORAS_CHEIA - SUM(VT.DT_FIM - VT.DT_INI)*24 ),VT.QT_HORAS_CHEIA)) FROM(
select  
    LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA AS PROJETO,
    E.DS_EQUIPE as EQUIPE,
    AU.DT_FIM,
    AU.DT_INI,
    QT_HORAS_CHEIA
       
 from EQUIPE E,
    COLABORADOR C1,
    COMPETENCIA C,
    COMPETENCIA_COLABORADOR CC,
    AUSENCIAS AU
 where E.CD_EQUIPE=CC.CD_EQUIPE
    and C.CD_COMPETENCIA=CC.CD_COMPETENCIA
    and C1.CD_COLABORADOR=CC.CD_COLABORADOR
    and C1.STATUS = 1
    AND C1.CD_GESTOR <> C1.CD_COLABORADOR
    AND AU.CD_COLABORADOR (+) = C1.CD_COLABORADOR   
    AND TO_DATE(LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA,'MM/RRRR') = TRUNC(SYSDATE,'MM')
   -- GROUP BY CC.QT_HORAS_CHEIA,C1.DS_COLABORADOR 
) VT
WHERE TO_DATE(VT.PROJETO,'MM/RRRR') = TRUNC(SYSDATE,'MM')

GROUP BY VT.QT_HORAS_CHEIA,VT.EQUIPE,vt.projeto, vt.dt_ini,vt.dt_fim
--WHERE VT.PROJETO = ((select to_char(sysdate, 'MM') from dual)||'/'||(select to_char(sysdate, 'RRRR') from dual))
 

Share this post


Link to post
Share on other sites

Fiz o SUM externo no Select externo e o restante mantive como o primeiro scritp que te mandei, fiz o group by dentro e fora , ai funcionou certinho. Ficou 

SELECt VT.PROJETO,SUM(VT.ESFORCO_CALC),VT.EQUIPE FROM(

-- SCRIPT PRIMARIO -- 

) VT
WHERE TO_DATE(VT.PROJETO,'MM/RRRR') = TRUNC(SYSDATE,'MM')

GROUP BY VT.EQUIPE,VT.PROJETO

 

. Muito Obrigado Motta !

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Rodrigo5468
      Olá a todos(as), boa tarde!
       
      Tenho uma Query e um pequeno código em PHP para mostrar os resultados em uma tabela, mas estão repetindo os resultados da Query. Gostaria de uma solução, ou uma gambiarra para isso.
      Query
      SELECT DISTINCT b.ID AS "ID", b.Character AS "Personagem", b.Money AS "DinMao", b.BankMoney AS "DinBanco", b.Savings2 AS "DinPoupa", c.houseOwner AS "IDono", SUM(c.houseMoney) AS "DinCasa" FROM characters b INNER JOIN houses c ON (b.ID = c.houseOwner) ORDER BY ((b.Money+b.BankMoney+b.Savings2+c.houseMoney)) DESC LIMIT 0, 1000 PHP
      if(mysqli_num_rows($q) > 0) { while($r = $q->fetch_assoc()) { //Código da Tabela } }  
      Observação:
      Quando eu removo a seguinte parte da minha Query que é: SUM(c.houseMoney) AS "DinCasa" e deixo assim: c.houseMoney AS "DinCasa"
      Os dados da minha tabela repetem, não sei o motivo e/ou a circunstância disso. Mas peço a ajuda de vocês para solucionar. Vale ressaltar que (ID e houseOwner) tem os mesmos valores, só o valor da casa que recebe o valor do ID, e ele pode ter quantas casa ele quiser, e se ele tiver cinco casas, mostrará o resultado cinco resultados na minha tabela, como posso resolver isso?
       
       
      Meu muito obrigado desde já.
    • By eduardo_barros
      Boa tarde,
       
      Possuo uma aplicação rodando em Laravel com Db Mysql.
       
      Porem um cliente solicitou que o nosso sistema ficasse gravando informações no banco de dados SQL deles e vice e versa, só que o sistema deles não tem API, nesse caso vamos executar as queries do banco banco deles do nosso lado lendo e escrevendo, como funciona essa multiconexão de bancos dentro do laravel?
    • By thiago009
      Sou novato na área, estou criando um site para praticar, o meu problema está na página contatos. O objetivo é que ele salve os dados do formulário num arquivo do access. Sei que não é o ideal, como estou começando na área, acho que é melhor aprender assim para depois estudar outras formas.
      Criei um comando no SQL que intitulei de "grava", o nome do meu arquivo do access é "banco" e o html é contato.
      Tentei também validar os campos com java, mas não deu certo e exclui os códigos que tinha colocado no início do html, se alguém puder me ajudar a fazer a validação.
      Isso não é um trabalho, estou fazendo para aprender.

      Segue link com os arquivos:
      https://etecspgov-my.sharepoint.com/:f:/g/personal/thiago_cunha35_etec_sp_gov_br/EioK0B6ZHaNNlJ6zZWSXSfUB7PwxWfp-R5ulmqZOr1Hlpg?e=v51d7i
       
       
      Agradeço quem puder ajudar,
       

      Muito Obrigado.
    • By Robson Barros da Rocha
      Bom dia povo. Tenho um problema, e não uma dúvida. Eu executo no SQL Server esta query para agrupar os resultados cujo tenha o código do comprovante repetido:
      SELECT * FROM SHOP_Pedidos WHERE show='1' GROUP BY comprovante As colunas são:
      ID = Se preenche automaticamente
      comprovante = Recebe o código do comprovante
      productName = Nome do produto
      productValue = Valor do produto
      dateSent = Data que o produto foi enviado
      show = Enviado (1) e não enviado (0)
       
      A query que mostrei acima, não retorna dados porque aparece esse erro: "Column 'SHOP_Pedidos.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause." Certo, então aí que está o problema. Vendo o erro, eu troquei a * pela coluna comprovante, e resultou, mas a consulta só retorna a coluna comprovante (por conta do SELECT estar especificando somente ele. 
       
      A dúvida é: Tem como recuperar todos as colunas, assim como mysql?
    • By Pedro Vinicius Miguel Dias
      Pessoal, estou estudando o Banco de Dados Oracle e estou tendo um problema pra criar uma nova conexão.
      Durante o curso, o instrutor pede que eu crie duas conexoes, a TESTE com a senha: teste e a PRATICA com a senha :pratica... cada uma com uma senha e etc e elas funcionam.
      Eu por minha conta quis criar outra conexão com outro nome e outra senha, Ex. (User TESTE2 e senha: teste2) e ao testar, o Banco não conecta. Erro ORA-01017.
       
      Alguém consegue me ajudar?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.