GARANTIR DESCONTO

Fórum SubSelect com union all, order by e group by #562390

16/09/2016

0

Estou tendo umas dificuldades com um sql..
SELECT
  TABNOV.NUMERO_PROCESSO,
  TABNOV.DATA_ANDAMENTO,
  TABNOV.DATA_PUBLICACAO,
  TABNOV.STATUS,
  CLIENTES.NOME_CLIENTE,
FROM
  (select
     T1.NUMERO_PROCESSO,
     MAX(T3.DATA) as DATA_ANDAMENTO,
     MAX(T4.DATA) as DATA_PUBLICACAO,
     T1.DATA_ESCRITORIO,
     T1.DATA_DISTRIBUICAO,
     T1.STATUS,
     T1.COD_CLIENTE,
   from
     PROCESSOS T1
     	left join ANDAMENTOS_PROCESSUAIS T3 on T3.NUMERO_PROCESSO_AUX = T1.NUMERO_PROCESSO
        left join PUBLICACOES T4 on T4.NUMERO_PROCESSO_AUX = T1.NUMERO_PROCESSO
   union all
select
     T1.NUMERO_PROCESSO,
     MAX(T3.DATA) as DATA_ANDAMENTO,
     MAX(T4.DATA) as DATA_PUBLICACAO,
     T1.DATA_ESCRITORIO,
     T1.DATA_DISTRIBUICAO,
     T1.STATUS,
     T1.COD_CLIENTE,
   from
     PROCESSOS T1
     	left join ANDAMENTOS_PROCESSUAIS T3 on T3.NUMERO_PROCESSO_AUX = T1.NUMERO_PROCESSO
        left join PUBLICACOES T4 on T4.NUMERO_PROCESSO_AUX = T1.NUMERO_PROCESSO
   where                                      
     T1.NUMERO_PROCESSO2 <> "") TABNOV,
CLIENTES
WHERE
   TABNOV.COD_CLIENTE = CLIENTES.COD_CLIENTE
group by
     TABNOV.NUMERO_PROCESSO, TABNOV.STATUS, CLIENTES.NOME_CLIENTE
order by
  TABNOV.DATA_ANDAMENTO, TABNOV.NUMERO_PROCESSO


esse é só um resumo do SQL ele vai ate o 8 só que aparece uma erro
e como não tenho muita experiencia com SQL fico meio desorientado.
podem me ajudar?
Eduardo Silva

Eduardo Silva

Responder

Post mais votado

19/09/2016

Eduardo, funciona assim.

Imagine esse select abaixo:

SELECT CODIGO, NOME
  FROM TABELA



Quando for ordenar a tabela você pode ordenar por CODIGO (coluna 1) ou NOME (coluna 2).
O SQL permite que você referencie a coluna por números no ORDER BY.
Assim, quando você coloca ORDER BY 1,2, quer dizer que está ordenando por CODIGO e NOME.
Ja um ORDER BY 2,1, quer dizer que você está ordenando por NOME e CODIGO

E o que o Dirceu falou está correto, quando você usa um GROUP BY, tem que colocar no GROUP todas as colunas que estão no seu SELECT que não estejam sendo agregadas.

No caso da sua QUERY, você está dando um MAX na data, mas está colocando o GROUP BY na query de fora.

Entendeu?

Grande abs

Luiz Santos

Luiz Santos
Responder

Gostei + 2

Mais Posts

16/09/2016

Chrystian

qual a mensagem de erro?
Responder

Gostei + 0

17/09/2016

Eduardo Silva

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
Responder

Gostei + 0

17/09/2016

Dirceu Morais

Não entendi bem o seu sql.

Posso estar falando besteira, mas no group by vc tem que acrescentar todos os campos do Select
TABNOV.NUMERO_PROCESSO,
TABNOV.DATA_ANDAMENTO,
TABNOV.DATA_PUBLICACAO,
TABNOV.STATUS,
CLIENTES.NOME_CLIENTE


e quando existe a clausula union o order by voce usa numeros.
se você quer organizar por TABNOV.DATA_ANDAMENTO, TABNOV.NUMERO_PROCESSO
então seria order assim:
Order by 2,1
Responder

Gostei + 1

19/09/2016

Eduardo Silva

Não entende o 2,1 vou colocar o Order by 2,1 e os campos ou só o 2,1
Responder

Gostei + 0

19/09/2016

Eduardo Silva

então eu não precisaria por o "GROUP BY" na parte fora do sub?
Responder

Gostei + 0

19/09/2016

Luiz Santos

então eu não precisaria por o "GROUP BY" na parte fora do sub?


Isso.
Você só usa o Group By se usar alguma função de agregação (SUM, COUNT, AVG, MAX e MIN)
Responder

Gostei + 1

19/09/2016

Dirceu Morais

Ao invés de o nome do campo no ORDER BY você utiliza o número da posição que ele encontra na Select.

Se você tem por exemplo:
SELECT NUMERO_PROCESSO,  DATA_ANDAMENTO,  DATA_PUBLICACAO,  STATUS,  NOME_CLIENTE
FROM Cliente


Se você quiser ordenar pelo nome do cliente, você pode usar:

Order by Nome_cliente


ou


Order by 5
Responder

Gostei + 1

20/09/2016

Eduardo Silva

Pessoal Muito Obrigado! Foi de uma grande ajuda! muito abrigado por tudo


pode fechar o tópico
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar