Como executar inner join+group by+order by no Interbase/Firebird?

28/01/2016

0

Prezados,

Como faço para executar um "SELECT" contendo diversos "INNER JOIN" ligando várias tabelas e junto usar um "GROUP BY" para agrupar o resultado por media dúzia de colunas da tabela principal? Consegui fazer funcionar, mas tenho que informa todas as colunas relacionas no "SELECT", só que o resultado não fica como necessito, pois como já mencionei, quero agrupar somente por media dúzia de coluna listadas no "SELECT".

Só para constar: Fiz um simulação no MySQL e o mesmo funciona prefeitamente, mas no Interbase/Firebird não dá certo.

SQL (Teste):
SELECT t1.oco_descricao,t1.emp_codigo,t1.oco_usuario,t2.emp_fantasia,t3.usu_nome FROM ocorrencias t1
INNER JOIN empresas t2 ON t2.emp_codigo = t1.emp_codigo
INNER JOIN usuarios t3 ON t3.usu_codigo_interno = t1.oco_usuario
GROUP BY t1.emp_codigo,t1.oco_descricao,t1.oco_usuario
ORDER BY t1.emp_codigo,t1.oco_descricao


Grato e aguardo qualquer tipo de ajuda.
M. C.

M. C.

Responder

Posts

02/02/2016

Huidemar Costa

Para o Group by, você precisa de função 'agregada' ex: sum, count, max:

Uma alternativa seria você usar o max nos campos que você não está agrupando, o sql ficaria assim:
SELECT 
t1.oco_descricao,
t1.emp_codigo,
t1.oco_usuario,
max(t2.emp_fantasia) emp_fantasia,
max(t3.usu_nome)  usu_nome
FROM ocorrencias t1
INNER JOIN empresas t2 ON t2.emp_codigo = t1.emp_codigo
INNER JOIN usuarios t3 ON t3.usu_codigo_interno = t1.oco_usuario
GROUP BY t1.emp_codigo,t1.oco_descricao,t1.oco_usuario
ORDER BY t1.emp_codigo,t1.oco_descricao


Por que você precisa do GROUP BY ? (Eu não entendi muito bem, as vezes seu problema poderia ser resolvido de outra forma sem a necessiadade do GROUP BY)
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar