SubSelect com union all, order by e group by
Estou tendo umas dificuldades com um sql..
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?
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
Curtidas 0
Melhor post
Luiz Santos
19/09/2016
Eduardo, funciona assim.
Imagine esse select abaixo:
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
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
GOSTEI 2
Mais Respostas
Chrystian
16/09/2016
qual a mensagem de erro?
GOSTEI 0
Eduardo Silva
16/09/2016
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).
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).
GOSTEI 0
Dirceu Morais
16/09/2016
Não entendi bem o seu sql.
Posso estar falando besteira, mas no group by vc tem que acrescentar todos os campos do Select
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:
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
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
GOSTEI 1
Eduardo Silva
16/09/2016
Não entende o 2,1 vou colocar o Order by 2,1 e os campos ou só o 2,1
GOSTEI 0
Eduardo Silva
16/09/2016
então eu não precisaria por o "GROUP BY" na parte fora do sub?
GOSTEI 0
Luiz Santos
16/09/2016
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)
GOSTEI 1
Dirceu Morais
16/09/2016
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:
Se você quiser ordenar pelo nome do cliente, você pode usar:
Order by Nome_cliente
ou
Order by 5
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
GOSTEI 1
Eduardo Silva
16/09/2016
Pessoal Muito Obrigado! Foi de uma grande ajuda! muito abrigado por tudo
pode fechar o tópico
pode fechar o tópico
GOSTEI 0