[firebase-br] Select com subselect e groupby

Sandro Souza escovadordebits em gmail.com
Qua Out 5 14:01:15 -03 2011


Bom dia/tarde Marcos.

Que tal dividir para conquistar?

Primeiro, um SELECT que retorna as informações sem agrupamento:

select
  c.modelo,
  c.serie,
  c.numnf,
  c.data_emissao,
  c.parceiro,
  c.data_entrada,
  c.valor_frete,
  c.valor_seguro,
  c.vlroutros,
  c.vlrnota,
  (select first 1
     case when fp.prazo_medio = 0 then 1 else 2 end
   from
     faturas_pagar fp
   where
     fp.compra_id = c.compra_id) tipo_fatura,
  ci.total,
  ci.desconto,
  ci.ipi_valor,
  ci.st_valor_substituicao
from
  compras c,
  compras_item ci
where
  ci.compra_id = c.compra_id

Agora vamos utilizar o resultado desse primeiro SELECT em um mais externo:

select
  x.modelo,
  x.serie,
  x.numnf,
  x.data_emissao,
  x.parceiro,
  x.data_entrada,
  x.valor_frete,
  x.valor_seguro,
  x.vlroutros,
  x.vlrnota,
  x.tipo_fatura,
  sum(x.total) total_mercadorias,
  sum(x.desconto) total_descontos,
  sum(x.ipi_valor) total_ipi,
  sum(x.st_valor_substituicao) total_st
from (
  select
    c.modelo,
    c.serie,
    c.numnf,
    c.data_emissao,
    c.parceiro,
    c.data_entrada,
    c.valor_frete,
    c.valor_seguro,
    c.vlroutros,
    c.vlrnota,
    (select first 1
       case when fp.prazo_medio = 0 then 1 else 2 end
     from
       faturas_pagar fp
     where
       fp.compra_id = c.compra_id) tipo_fatura,
    ci.total mercadoria,
    ci.desconto,
    ci.ipi_valor,
    ci.st_valor_substituicao
  from
    compras c,
    compras_item ci
  where
    ci.compra_id = c.compra_id) x
group by
  1,2,3,4,5,6,7,8,9,10,11

Por favor, teste esse código para ver se houve alguma diferença.

Espero ter ajudado mais que atrapalhado. :D
2011/10/4 Marcos Weimer <marcosweimer em gmail.com>

> Ola!
>
> Estou levando uma "surra" aqui.
>
> Estou tentando fazer um select com um sub-select e um groupby.
> Assim..
>
> select
>  c.modelo, c.serie, c.numnf, c.data_emissao, c.parceiro, c.data_entrada,
>  c.valor_frete, c.valor_seguro, c.vlroutros, c.vlrnota,
>  ( select first 1 case when fp.prazo_medio = 0 then 1 else 2 end from
> faturas_pagar fp where fp.compra_id = c.compra_id) as tipo_fatura,
>  sum(ci.total) as total_mercadorias,
>  sum(ci.desconto) as total_descontos,
>  sum(ci.ipi_valor) as total_ipi,
>  sum(ci.st_valor_substituicao) as total_st
>
> from compras c
> inner join compras_item ci on ci.compra_id = c.compra_id
>
> group by 1,2,3,4,5,6,7,8,9,10,11
>
> se retiro o sub-select e o "11" do group by funciona.
>
> o erro que é apresentado é o seguinte:
>
> Invalid expression in the select list (not contained in either an aggregate
> function or the GROUP BY clause).
>
> Alguem ja tentou fazer isto ?
>
> P.S. Ja procurei no google
>
>
>
> -=Ma®©oS=-
> Marcos R. Weimer
> Puma GTE 1974 Tubarão
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista