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

Firebird

28/01/2016

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.

Curtidas 0

Respostas

Huidemar Costa

Huidemar Costa

28/01/2016

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)
GOSTEI 0
POSTAR