Publicidade

Entre para seguir isso  
Seguidores 0
josePeixoto

Erro 'Group By'

Olá, alguém poderia me informar onde está o erro dessa consulta?

SELECT DISTINCT relatorio.CD_RELATORIO,
  relatorio.DT_ATUALIZACAO,
  relatorio.DS_TITULO descricao,
  obter_usuario_pf(relatorio_documentacao.CD_PF_SOLIC) Solicitante,
  obter_usuario_pf(relatorio_documentacao.CD_PF_CRIADOR) Criador,
  wm_concat(perfil.ds_perfil) Perfil
FROM relatorio
INNER JOIN relatorio_documentacao
ON relatorio.NM_USUARIO = relatorio_documentacao.NM_USUARIO
INNER JOIN relatorio_perfil
ON relatorio_documentacao.NR_SEQ_RELATORIO = relatorio_perfil.NR_SEQ_RELATORIO
INNER JOIN PERFIL
ON relatorio_perfil.cd_perfil                               = perfil.cd_perfil
WHERE obter_usuario_pf(relatorio_documentacao.CD_PF_SOLIC) IS NOT NULL
AND obter_usuario_pf(relatorio_documentacao.CD_PF_CRIADOR) IS NOT NULL
AND relatorio.DT_ATUALIZACAO BETWEEN :dt_inicio AND :dt_fim
GROUP BY perfil.ds_perfil,
  relatorio.CD_RELATORIO,
  relatorio.DT_ATUALIZACAO,
  relatorio.DS_TITULO
ORDER BY 4,2,1

Ele está dando o erro: ORA-00979: não é uma expressão GROUP BY.

Obrigado desde já!

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é preciso o "group by" pois não é sql agregadora (sum,count,max etc) , caso seja todas as colunas do select (menos a de grupo) devem estar no group by.

O "distinct" dispinsa o group by.

exemplo

SELECT relatorio.CD_RELATORIO,
  relatorio.DT_ATUALIZACAO,
  relatorio.DS_TITULO descricao,
  obter_usuario_pf(relatorio_documentacao.CD_PF_SOLIC) Solicitante,
  obter_usuario_pf(relatorio_documentacao.CD_PF_CRIADOR) Criador,
  wm_concat(perfil.ds_perfil) Perfil,
  count(*) qtd
FROM relatorio
...
GROUP BY relatorio.CD_RELATORIO,
  relatorio.DT_ATUALIZACAO,
  relatorio.DS_TITULO ,
  obter_usuario_pf(relatorio_documentacao.CD_PF_SOLIC) ,
  obter_usuario_pf(relatorio_documentacao.CD_PF_CRIADOR) ,
  wm_concat(perfil.ds_perfil)
ORDER BY 4,2,1
0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar Agora
Entre para seguir isso  
Seguidores 0

  • Próximos Eventos

  • Conteúdo Similar

    • Por giesta
      Prezados Amigos, boa noite!
       
      Temos um sistema legado aqui que quase todo sábado apresenta indisponibilidade por uns 20 minutos e depois volta. 
      Olhando várias coisas possíveis chegamos ao Oracle, porém eu nao sou mto bom de Oracle :P
       
      Bom. Sempre que o sistema "senta" ele apresenta a query abaixo no V$SESSION_LONGOPS, que pelo que eu sei foi disparada pela parametrização do optimizer_dynamic_sampling (que ao ser consultado da 2, ou seja padrao). também são apresentados uma série de call dbms_stats.gather_database_stats_job_proc (  ), assim como um Table scan na tabela AVL.OSC_EQUIPE_ASS que esta atualmente com 19 milhões de linhas.
       
       
      A pergunta qual seria o melhor caminho? Posso passar isso pra zero? devo expurgar parte dos 19 milhões de registros? Tem como eu impedir ele de rodar sabado e só rodar no domingo fora do expediente?
       
      /* SQL Analyze(1) */ select /*+  full(t)    no_parallel(t) no_parallel_index(t) dbms_stats cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring no_substrb_pad  */to_char(count("DATA_ENVIO_ORDEM")),to_char(substrb(dump(min("DATA_ENVIO_ORDEM"),16,0,32),1,120)),to_char(substrb(dump(max("DATA_ENVIO_ORDEM"),16,0,32),1,120)),to_char(count("DATA_RECEBIMENTO_CELULAR")),to_char(substrb(dump(min("DATA_RECEBIMENTO_CELULAR"),16,0,32),1,120)),to_char(substrb(dump(max("DATA_RECEBIMENTO_CELULAR"),16,0,32),1,120)),to_char(count("DATA_EXECUCAO_CAMPO")),to_char(substrb(dump(min("DATA_EXECUCAO_CAMPO"),16,0,32),1,120)),to_char(substrb(dump(max("DATA_EXECUCAO_CAMPO"),16,0,32),1,120)),to_char(count("DATA_DIGITACAO_RETORNO")),to_char(substrb(dump(min("DATA_DIGITACAO_RETORNO"),16,0,32),1,120)),to_char(substrb(dump(max("DATA_DIGITACAO_RETORNO"),16,0,32),1,120)),to_char(count("DATA_TRANSMISSAO_RETORNO")),to_char(substrb(dump(min("DATA_TRANSMISSAO_RETORNO"),16,0,32),1,120)),to_char(substrb(d  
    • Por bmcandido
      Minha Sql traz mais de um registro ao realizar a consulta:

        SELECT XML.CHAVEACESSO,
               XML.CODEMP,
               XML.CODPARC,
               XML.CODTIPOPER,
               XML.CODUSUIMP,
               XML.CODUSUPROC,
               XML.CODVEND,
               XML.DETALHESIMPORTACAO,
               XML.DHIMPORT,
               XML.DHPROCESS,
               XML.IMPORTADOMDE,
               XML.NOMEARQUIVO,
               XML.NUARQUIVO,
               XML.NUMNOTA,
               XML.NUNOTA,
               XML.SITUACAOMDE,
               XML.SITUACAONFE,
               XML.STATUS,
               XML.DHEMISS,
               TEMXML
          FROM (SELECT  (CASE WHEN XML IS NULL THEN 'NAO' ELSE 'SIM' END) AS TEMXML
                  FROM TGFIXN),
               TGFIXN XML 
         WHERE  NUMNOTA=6511
      GROUP BY XML.CHAVEACESSO,
               XML.CODEMP,
               XML.CODPARC,
               XML.CODTIPOPER,
               XML.CODUSUIMP,
               XML.CODUSUPROC,
               XML.CODVEND,
               XML.DETALHESIMPORTACAO,
               XML.DHIMPORT,
               XML.DHPROCESS,
               XML.IMPORTADOMDE,
               XML.NOMEARQUIVO,
               XML.NUARQUIVO,
               XML.NUMNOTA,
               XML.NUNOTA,
               XML.SITUACAOMDE,
               XML.SITUACAONFE,
               XML.STATUS,
               XML.TIPO,
               XML.DHEMISS,
               TEMXML
       
      A no registro CASE WHEN o resultado correto da funcionalidade seria SIM, só que o registro traz SIM e NAO duplicando o registro.
       
    • Por gust.php
      Senhores, to usando o zend2 com doctrine2 e tentando fazer uma query dinamica para alguns relatórios.
       
      Vou gerar um relatório bem simples de clientes com os seguintes filtros: status, tipo e estado
      Estou tentando assim no doctrine sem sucesso.
      O que acontece é que ele retorna todos os registros de clientes, ele não filtra mesmo eu setando as variaveis.
       
      public function periodo($status = "", $estado = "", $tipo = "")        {             $em = $this->getEntityManager();             $qb = $em->createQueryBuilder();                          $qb->select('u');             $qb->from('Application\Model\Pessoa', 'u');                          if($status != ""){                 $qb->andWhere('u.ATIVO = :status');                 $qb->setParameter('status', $status);             }                          if($estado != ""){                 $qb->andWhere('u.UF = :estado');                 $qb->setParameter('estado', $estado);             }                          if($tipo != ""){                 $qb->andWhere('u.TIPO = :tipo');                 $qb->setParameter('tipo', $tipo);             }                          $qb->andWhere('u.GRUPO = C');             $qb->orderBy('u.RAZAO','ASC');                          $query = $qb->getQuery();                          return $query->getResult();        }  
    • Por lipergs
      Alguém tem e quer compartilhar ou conhece alguma rotina FREE para consulta automatizada à SEFAZ para busca de NFE??
    • Por josenilson
      olá pessoal tenho esse Script no qual eu uso para gerar um relatório a partir de um campo inputs,  agora estou tentando fazer com que esse script funcione porem com dois campos no meu caso Data inicial  e Data Final,  não sei se estou correto mas o SQL que devo utilizar seria esse   SELECT * FROM Pessoa WHERE Nascimento BETWEEN '01-01-1981' AND '31-12-1990'
      SELECT * FROM cad_clientes WHERE data_nascimento BETWEEN 'varial data inicial ' AND 'variavel data final' me corrija por favor seu eu estiver errado,  minha limitação esta como devo adaptar o código que já utilizo para armazenar nesse caso os  dois valores,  e mais uma coisa por favor como faço para que ao retornar o resultado da consulta seja mostrado os nomes das respectivas dadas consultadas.
       
      abaixo esta o código que utilizo, obrigado.
       
      <?php if (isset($_POST["search"])) { $searchq = $_POST["search"]; $searchq = preg_replace("#[^0-9a-z]#i", "",$searchq); $consulta = $pdo->query(" SELECT nome FROM cad_cliente WHERE nome LIKE '$searchq%' ")or die ("could not search !" ); $dados = $consulta->fetchAll(PDO::FETCH_ASSOC); $numRows = count($dados); if($numRows > 0) { foreach ($dados as $result) { echo "<html><label></label><p>".$result['nome']."<br/></html>"; } } else { echo" Não há registro"; } } ?>