Ir para conteúdo
Fórum Script Brasil
  • 0

Erro com Group by, case e Subqueries


Dr. House

Pergunta

Bom dia. Tenho um banco de dados Firebird 1.5.6.

Estou rodando uma consulta muuuuuuuuito grande, cheia de subqueries somando varios valores.

Basicamente o que eu preciso é agrupar pelo tipo de lançamento.

Porem eu tenho 7 tipos de lancamentos diferentes, o que eu fiz foi transformar esses 7 tipos em 2 usando case, e agrupar por estes 2. vou postar parte do sql (n posso postar todo) pra vocês terem uma ideia do que to falando...

select distinct      
    fo.ano, 
    fo.idlancamento, 
	Case  fo.tipolancamento
	  when '3' then '1'
	  else '0'
	end as tipofolha, 
    fo.data, 
    f.cliente,
   (select  sum(fi.valor)          
     from        
    lanc fo3            
    inner join itemlanc fi  on (fo3.folha=fi.folha) and (fo3.ano=fi.ano)    
    inner join item e on (fi.item=e.item)        
  where  fi.item in        
    (select es.itemsys         
    from itemsys es       
    where es.nome = 'valor1')          
    and fo3.tipolancamento = fo.tipolancamento       
        and fo3.data between '2013-01-01' and '2013-01-31'  
  and fo3.cliente=f.cliente       
  ) as valor_base,      
  --
  --contem varias subquereies como a anterior
- -
from lanc fo 
where 
fo.data between '2013-01-01' and '2013-01-31' 
and 
fo.ano=2013 
group by 
case 
  when fo.tipolancamento = 3 then 1 
  else 0 
end 

o problema é que aquando rodo esse comando, aparece a seguinte msg:

Error: GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
SQLState:  HY000
ErrorCode: 335544569

alguém sabe como me ajudar?

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Bom dia!

Tenta assim, agrupando pelo numero de variáveis selecionadas.

select distinct
fo.ano,
fo.idlancamento,
    Case fo.tipolancamento
     when '3' then '1'
     else '0'
    end as tipofolha,
fo.data,
f.cliente,
(select sum(fi.valor) 
from
lanc fo3 
inner join itemlanc fi on (fo3.folha=fi.folha) and (fo3.ano=fi.ano) 
inner join item e on (fi.item=e.item) 
where fi.item in 
(select es.itemsys 
from itemsys es 
where es.nome = 'valor1') 
and fo3.tipolancamento = fo.tipolancamento 
and fo3.data between '2013-01-01' and '2013-01-31' 
and fo3.cliente=f.cliente 
) as valor_base 
--
--contem varias subquereies como a anterior
- -
from lanc fo 
where
fo.data between '2013-01-01' and '2013-01-31' 
and
fo.ano=2013 
group by 1,2,3,4,5 --Agrupa pelo numero de variaveis selecionadas
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...