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

28/01/2016

9

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.
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
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira