Fórum Como usar um campo criado com (as) em uma clausula group by? #38978

26/09/2003

0

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


Aledeol

Aledeol

Responder

Posts

26/09/2003

Afarias

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+


Responder

Gostei + 0

26/09/2003

Aledeol

Obrigado pela dica


Responder

Gostei + 0

01/02/2006

Nigro

e no FB 1.5 como ficaria?


Responder

Gostei + 0

01/02/2006

Emerson Nascimento

no FB 1.5 você não deve ´apelidar´ a coluna no group by.
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´


Responder

Gostei + 0

01/02/2006

Rodolpho123

Tente assim:
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.


Responder

Gostei + 0

01/02/2006

Rodolpho123

Desculpe, o corretor é este...
Tente assim:
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
O FB permite vc grupar os campos pela ordem no select, referenciando apenas na posição.



Responder

Gostei + 0

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

Aceitar