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 andreluis78
      Olá a todos.
      Criei um procedimento para verificar se um usuário está cadastrado no banco de dados.
      Utilizo Firebird como BD e componentes Zeos para acessar o banco.
      Resolvi criar uma query em tempo de execução para fazer a verificação. Não dá nenhum erro, porém, quando digito o nome do usuário no Edit e clico
      no botão que executa o procedimento, ele dá ''usuário inexistente'', mesmo se o nome do usuário estiver cadastrado no banco.
       
      Segue o código:
       
      procedure Tfrm_login.SpeedButton1Click(Sender: TObject);
      var Qry : TZQuery;
      begin
        Qry:=TZQuery.Create(nil);
        Qry.Connection := dm_dados.ZConnection1;  //componente de conexão
        Qry.SQL.Add('select codigo, nome, acessar, user, pass from clientes');
        Qry.Open;
        if Qry.Locate('USER',Edit1.Text,[]) then
        begin
          ShowMessage('usuário cadastrado');
        end
        else
        begin
          ShowMessage('usuário inexistente');
          Edit1.SetFocus;
        end;
        FreeAndNil(Qry);
      end;
       
      Se alguém puder ajudar agradeço desde já.
      Obrigado
    • By Motta
      TikTok evita bloqueio graças a acordo com Oracle e Walmart
    • By diegosrg
      Olá pessoal!
      Preciso de um help por favor.
      Seguinte, tenho uma base de dados abaixo e preciso incluir uma coluna com os valores acumulado do mês independente do produto.Base atual:
      YEARMONTH / PRODUTO/ VALOR 202001 /ABC / 123,00 202001 /DEF / 234,00 202002 /ABC / 289,00 202002 /GHU / 222,00  
      Com a nova coluna ficaria assim:
      YEARMONTH / PRODUTO/ VALOR / VALOR ACUMULADO 202001 /ABC / 123,00 / 357,00 202001 /DEF / 234,00 / 357,00 202002 /ABC / 289,00 / 511 202002 /GHU / 222,00 / 511  
      Alguém tem alguma dica?!
      Desde já agradeço
    • By gcors88
      Prezados, desenvolvi um gatilho onde este tem comunicação com outra tabela, uma é a coleta_sinal_vital, e onde o gatilho foi criado é na table  itcoleta_sinal_vital ( esta possui uma fk da primeira), a questão é que dentro do gatilho realizo um select na primeira tabela para consultar o valor inserido em uma coluna da primeira tabela, faço essa consulta baseada nessa fk que esta sendo inserida ou seja where = :new.cd_coleta_sinal_vital, a questão é que no momento em que esse select é executado ele não retorna dado nenhum, acredito que isto ocorre porque a inserção em ambas as tabelas é feito de forma simultânea, pois se comparado posteriormente o valor da coluna sempre é inserido, gostaria de saber se existe alguma forma de aplicar uma espera ou atraso neste gatilho para que ele possa capturar este valor sem problemas, grato!
    • By NaPraia
      Olá pessoal,
      Estou com um probleminha, eu tenho uma sequence criado num owner (owner_a), executei o comando para criar em outro owner(owner_b):
      grant all on sequence_a to owner_b
      e consegui usar, só que no dia seguinte esse grant sumiu e deu erro: ora-00942: tabela ou view não existe. No owner_a funciona corretamente.
      voltei a executar o comando de grant de funcionou de boa mas de ontem para hoje ocorreu novamente
      E acontece só para essa sequence, as outras do banco, não têm problema, funcionam normalmente
      Eu até pensei em dar um drop e criar de novo mas fico com receio que possa ter algum impacto no sistema que é daqueles que ninguém gosta de mexer, "tá funcionando, não mexe"
      E acontence nos dois ambiente, homologação e produção.
      Obrigado
×

Important Information

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