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 Dinho Nunes LC
      <div align="center" id="subtitulo"> Canais Abertos </div> <div class="ui cards"> <div class="card"> <div class="content"> <a href="globo.html" style="display: block; color: black"> <div align="center"> <div> <img class="ui tiny image" id="imagem_card_casa" src="assets/images/Rede_Globo_2014.png"> <div align="center" id = "nome_time_fora"> <b>Globo RJ</b> </div> </div> Onde "globo.html" seria substituído pelo link que esta em uma tabela do banco de dados.
       
      Já fiz a conexão. E tenho a base de dados pronta.
       
      Motivo pelo qual estou buscando ajuda:
       
      Faço manualmente a mudança de cada link (são mais de 300) diariamente para evitar copias de terceiros. Sendo assim poderia usar um CRUD para facilitar a troca dos links direto no banco de dados.
    • By jeanzinsousa
      Salve, Galera estou com uma dúvida estudando banco de dados e programação.
       
      escrevi a seguinte query:
       
      SELECT data_pg as diaria, SUM(valor_pg) as valor_diario, SUM(valor_despesa) as valor_despesa, (SELECT SUM(valor_pg) as dinheiro FROM pagamento WHERE tipo = 5 AND MONTH(data_pg) = 06 AND YEAR(data_pg) = 2019) as total_dinheiro, (SELECTSUM(valor_pg) as debito FROM pagamento WHERE tipo = 25 AND MONTH(data_pg) = 06 AND YEAR(data_pg) = 2019) as total_debito, (SELECT SUM(valor_pg) as credito FROM pagamento WHERE tipo = 15 AND MONTH(data_pg) = 06 AND YEAR(data_pg) = 2019) astotal_credito FROM pagamento WHERE MONTH(data_pg) = 06 AND YEAR(data_pg) = 2019 GROUP BY diaria ORDER BY `diaria`
       
      resultado:
      diaria  1 valor_diario valor_despesa total_dinheiro total_debito total_credito   2019-06-10 818.70 0 288.40 586.95 113.30 2019-06-11 169.95 0 288.40 586.95 113.30
       
       
       
       
      Como podem ver meu objetivo e separar por dia o resultado dos valores divididos por tipo de pagamento.
      porém o mesmo mostra a soma total nas subquery.
      quando coloco o group by order by dentro das subquerys apresenta a seguinte mensagem de erro: #1242 - Subquery returns more than 1 row 
       
       
      como resolver?
    • By JorgeeHenrique
      Bom dia, sou iniciante em Delphi, estou fazendo um Cadastro de Clientes, gostaria de usar três Edit´s para filtrar alguns  dados porem com o código abaixo consegui fazer apenas com 1 edit.text, como faço pra usar três e que se algum estiver em branco ele retorna o valor apenas do Edit.text que foi preenchido?
       
      Exemplo: 
       
      Quero buscar por Nome, Situação e Rota (Cliente a da rota B com situação C) e se algum desses campos estiver vazio ele busca apenas o que foi preenchido. Obrigado pela atenção!
       
      .
      procedure TFrm_Cadastro.Bt_BuscarClick(Sender: TObject); begin with Frm_Cadastro.Tbl_Clientes do begin Close; SQL.Clear; SQL.Add( 'Select * from Tbl_Cad_Clientes'); SQL.Add('where Cli_Nome like :nome'); ParamByName('nome').Value := '%' + txt_buscar_nome.Text + '%'; Open; end; end;  
    • By lemanoel
      Oi, alguem pode me ajudar?
       
      Tenho uma tabela de status por dia, e efetivo um registro só quando ha alterações.. exemplo:
      Dia 01, bom
      Dia 03, médio
      Dia 10, ruim
       
      Como encontrar o status do dia 07, via sql?
      Olhando pro exemplo sei que seria MÉDIO… mas nao tenho a menor ideia de como escrever o código....
    • By Viniciusr9
      Estou com um problema com esse esse script abaixo: 
      tenho um checkbox na minha página ( não em relatório, na página mesmo, um item de página) e gostaria que o mesmo ao ser clicado e pressionado um botão submit realizasse o procedimento do script, porém ele faz o processo mas não me retorna nada. acredito que o problema seja no LOOP do APEX_APPLICATION.G_F01 . Alguém consegue me ajudar com isso?
      DECLARE V_DS_COLAB VARCHAR2(50); BEGIN APEX_DEBUG.MESSAGE('CHECK:'|| vCHECK); FOR A IN 1 .. APEX_APPLICATION.G_F01.COUNT LOOP BEGIN SELECT C.DS_COLABORADOR INTO V_DS_COLAB FROM COLABORADOR C WHERE C.USER_APEX = V('APP_USER') ; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20001,'NENHUM REGISTRO ENCONTRADO!'); WHEN TOO_MANY_ROWS THEN RAISE_APPLICATION_ERROR(-20002,'MAIS QUE UM REGISTRO ENCONTRADO!'); WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20003,'ERRO NAO PREVISTO' || SQLERRM) ; END; :P12_SUPER := (V_DS_COLAB || ' - ' || TO_CHAR(SYSDATE,'DD/MM/RRRR HH24:MI')); UPDATE COMPETENCIA_COLABORADOR CC SET FINALIZADO_SN = 'S' WHERE CC.CD_EQUIPE = :P12_EQUIPE AND CC.CD_COMPETENCIA = (SELECT C.CD_COMPETENCIA FROM COMPETENCIA C WHERE TO_DATE(LPAD(C.MES_COMPETENCIA,2,'0') || '/' || C.ANO_COMPETENCIA,'MM/RRRR') = TO_DATE(:P12_COMPETENCIA,'MM/RRRR')); END LOOP; END;  
×

Important Information

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