Como usar um campo criado com (as) em uma clausula group by?
Bom dia galera,
estou com a seguinte query:
select
extract(month from dataloca)as mes, L.carid,c.carplaca,c.carmodelo,
c.carcor,c.caranomod,c.carsubtipo,min(L.dataloca),max(L.dataloca),
min(L.lockminicial),max(L.lockmfinal),sum(l.valorloca)
from
tabloca L left join tabcarros C on L.carid = c.carid
where
L.carid in (select carid from tabcarros) and
L.loctipomov =´LIBERAR´ and L.cliid >1
group by
extract(month from dataloca)as mes,L.carid,c.carplaca,c.carmodelo,
c.carcor,c.caranomod,c.carsubtipo
Order by
L.carid
//
Quando mando compilar ele dá a msg: token unknow line 11 char 33 (as).
Se eu apenas coloco mes no group by dá:
Column Unknown MES
Se eu não coloco o MES no group by, dá:
Invalid expression in select list(not contained in either an agregate function or the group by clause)
A questão é q preciso ordenar esta query por mes e não por data. Como posso fazer isto?
Obrigado
estou com a seguinte query:
select
extract(month from dataloca)as mes, L.carid,c.carplaca,c.carmodelo,
c.carcor,c.caranomod,c.carsubtipo,min(L.dataloca),max(L.dataloca),
min(L.lockminicial),max(L.lockmfinal),sum(l.valorloca)
from
tabloca L left join tabcarros C on L.carid = c.carid
where
L.carid in (select carid from tabcarros) and
L.loctipomov =´LIBERAR´ and L.cliid >1
group by
extract(month from dataloca)as mes,L.carid,c.carplaca,c.carmodelo,
c.carcor,c.caranomod,c.carsubtipo
Order by
L.carid
//
Quando mando compilar ele dá a msg: token unknow line 11 char 33 (as).
Se eu apenas coloco mes no group by dá:
Column Unknown MES
Se eu não coloco o MES no group by, dá:
Invalid expression in select list(not contained in either an agregate function or the group by clause)
A questão é q preciso ordenar esta query por mes e não por data. Como posso fazer isto?
Obrigado
Aledeol
Curtidas 0
Respostas
Afarias
26/09/2003
o Interbase e o Firebird 1.0 não permitem agrupar por função (extract por ex.) -- sendo assim, as soluções são::
1 - manter um campo mês automaticamente preenchido na tabela
ou
2 - criar uma VIEW usando o extract para definir o campo MES e então fazer a query em cima desta VIEW
T+
1 - manter um campo mês automaticamente preenchido na tabela
ou
2 - criar uma VIEW usando o extract para definir o campo MES e então fazer a query em cima desta VIEW
T+
GOSTEI 0
Aledeol
26/09/2003
Obrigado pela dica
GOSTEI 0
Nigro
26/09/2003
e no FB 1.5 como ficaria?
GOSTEI 0
Emerson Nascimento
26/09/2003
no FB 1.5 você não deve ´apelidar´ a coluna no group by.
além de não apelidar o campo agregado no [i:6fa385dce1]group by[/i:6fa385dce1], a outra coisa que eu fiz foi o trocar o [i:6fa385dce1]left join[/i:6fa385dce1] por [i:6fa385dce1]inner join[/i:6fa385dce1]. fiz isso porque notei que no where era adicionada uma subselect sem necessidade. as demais alterações foram ´estéticas´
select extract(month from dataloca) as mes, L.carid, c.carplaca, c.carmodelo, c.carcor, c.caranomod, c.carsubtipo, min(L.dataloca), max(L.dataloca), min(L.lockminicial), max(L.lockmfinal), sum(l.valorloca) from tabloca L inner join tabcarros c on L.carid = c.carid where L.loctipomov = ´LIBERAR´ and L.cliid > 1 group by extract(month from dataloca), L.carid, c.carplaca, c.carmodelo, c.carcor, c.caranomod, c.carsubtipo Order by L.carid
além de não apelidar o campo agregado no [i:6fa385dce1]group by[/i:6fa385dce1], a outra coisa que eu fiz foi o trocar o [i:6fa385dce1]left join[/i:6fa385dce1] por [i:6fa385dce1]inner join[/i:6fa385dce1]. fiz isso porque notei que no where era adicionada uma subselect sem necessidade. as demais alterações foram ´estéticas´
GOSTEI 0
Rodolpho123
26/09/2003
Tente assim:
O FB permite vc grupar os campos pela ordem no select, referenciando apenas na posição.
select extract(month from dataloca) as mes, L.carid, c.carplaca, c.carmodelo, c.carcor, c.caranomod, c.carsubtipo, min(L.dataloca), max(L.dataloca), min(L.lockminicial), max(L.lockmfinal), sum(l.valorloca) from tabloca L inner join tabcarros c on L.carid = c.carid where L.loctipomov = ´LIBERAR´ and L.cliid > 1 group by extract(month from dataloca), L.carid, c.carplaca, c.carmodelo, c.carcor, c.caranomod, c.carsubtipo Order by 1
O FB permite vc grupar os campos pela ordem no select, referenciando apenas na posição.
GOSTEI 0
Rodolpho123
26/09/2003
Desculpe, o corretor é este...
Tente assim:
O FB permite vc grupar os campos pela ordem no select, referenciando apenas na posição.
select extract(month from dataloca) as mes, L.carid, c.carplaca, c.carmodelo, c.carcor, c.caranomod, c.carsubtipo, min(L.dataloca), max(L.dataloca), min(L.lockminicial), max(L.lockmfinal), sum(l.valorloca) from tabloca L inner join tabcarros c on L.carid = c.carid where L.loctipomov = ´LIBERAR´ and L.cliid > 1 group by 1, L.carid, c.carplaca, c.carmodelo, c.carcor, c.caranomod, c.carsubtipo Order by 1
GOSTEI 0