Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RenatoReis

Query com Subquery

Recommended Posts

Srs., boa tarde.

 

Preciso gerar uma consulta que possa visualizar todos os registros de contribuição de aplicadores ordenados por empresa, matricula e data, MAS apenas relacionar os aplicadores com saldo > 0.

 

Tabela MOVTO, contém os campos Empresa, Matricula, Data e Valor

 

 

   101 63   26/05/2008 1,35

   101 212 26/05/2008 -4,95
   101 221 26/05/2008 1742,48
   101 221 23/06/2008 30,48
   101 221 16/07/2008 30,48
   101 221 15/08/2008 30,48
   101 221 15/09/2008 30,48
   101 221 07/11/2008 60,96
   101 221 09/12/2008 30,48

 

 

No exemplo acima, teria relacionados, então, apenas as matrículas 63 e 221, com seus respectivos movimentos.

A matricula 212 seria relacionado devido ao saldo <=0

 

Tentei o seguinte, mas dá erro na subquery:

 

 

select movempr, movmatr, movdata, movvalor 
FROM SCCAMOVC where exists (select movempr, movmatr, sum(movvalor) as Capital 
                            from sccamovc 
                            where Capital>0) 
group by movempr, movmatr, movdata, movvalor

 

Alguém saberia a forma correta de executar a query. Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

select movempr, movmatr, movdata, movvalor

FROM SCCAMOVC

where movempr, movmatr IN (select movempr, movmatr

from sccamovc

GROUP BY movempr, movmatr

HAVING sum(movvalor) > 0)

 




			
		

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Motta.

Deu erro na execução do comando que vc me passou informando que há uma palavra-chave ou frase não conhecida.

Os nomes dos campos estão corretos.

Att.

RenatoReis

Compartilhar este post


Link para o post
Compartilhar em outros sites

Precisa trazer todas as datas?

Se sim, somente a ultima?

 

select movempr, movmatr, max(movdata), sum(movvalor)
FROM SCCAMOVC 
WHERE sum(movvalor) > 0
group by movempr, movmatr

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente

 

 

select movempr, movmatr, movdata, movvalor

FROM SCCAMOVC
where (movempr, movmatr) IN (select (movempr, movmatr)

                                              from sccamovc

                                             GROUP BY movempr, movmatr
                                             HAVING sum(movvalor) > 0

 

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

Preciso relacionar todas as datas de movimento sim.

Na query que vc me passou por último, dá um erro que parece estar idenificando o campo MOVEMPR depois do primeiro WHERE da clausula como uma tabela.

Testei sem os parenteses nos trechos (movempr, movmatr), mas dá o mesmo erro.

 

Testei apenas o trecho:
select movempr, movmatr from sccamovc GROUP BY movempr, movmatr HAVING sum(movvalor) > 0
e dá o mesmo erro.
Acredito que o problema esteja na subquery.
Continuo pesquisando aqui....Abs
att

Compartilhar este post


Link para o post
Compartilhar em outros sites


select movempr, movmatr, movdata, movvalor

FROM SCCAMOVC

where (movempr, movmatr)

IN (select movempr, movmatr

from sccamovc

GROUP BY movempr, movmatr

HAVING sum(movvalor) > 0)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

Dando erro!

Cannot open file "SCCAMOVC where (movempr.DBF". A sintaxe do nome do arquivo, do nome do diretório ou do rótulo do volume está incorreta.

 

Ah, esqueci de dizer, mas acredito não haver problema, pois to fazendo esta query para ler uma tabela DBF

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, fiz desta forma:

 

select movempr, movmatr, movdata, movvalor

FROM SCCAMOVC

GROUP BY movempr, movmatr, movdata, movvalor

HAVING sum(movvalor) > 0

 

Com isto, seleciono todos os registros de lançamento agrupados pelo movempr e movmatr.

 

Mas ainda há um problema! Caso o campo movvalor tenha como conteúdo um valor negativo, o registro é descartado. NÃO PODE! Na verdade quero descartar todos os registro de um determinado sócio, caso o somatório final seja <=0

 

Até

Compartilhar este post


Link para o post
Compartilhar em outros sites
select movempr, movmatr, movdata, movvalor
FROM SCCAMOVC
GROUP BY movempr, movmatr, movdata, movvalor
HAVING sum(movvalor) <> 0

ou

 

 

 

select movempr, movmatr, movdata, movvalor
FROM SCCAMOVC
GROUP BY movempr, movmatr, movdata, movvalor
HAVING sum(movvalor) != 0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, ok isso mesmo, bastava trocar o sinal de > 0 para <> 0, mas acontece que nos lançamentos podem haver retiradas e caso aconteca retirada do saldo total, o restante será igual a Zero, então, estes registros para o socio devem ser desconsiderados.<br />Devo apenas considerar os sócios cujo somatorio total seja > 0, mesmo que tenham havido restiradas.<br />Ok?<br />Abc

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei isso:

 

select movempr, movmatr, movdata, movvalor FROM SCCAMOVC where in (select sum(movvalor) as soma from sccamovc where soma > 0 GROUP BY movempr, movmatr)

 

Apresenta o erro: function name is missing

 

Preciso de grupos de registro(Contribuições e retiradas) por empresa e matricula onde o saldo(Contribuições - retiradas) seja > 0

 

Alguém sabe do que se trata e como posso fazer?

 

Att

Compartilhar este post


Link para o post
Compartilhar em outros sites
select movempr, movmatr, movdata, sum(movvalor)FROM SCCAMOVC GROUP BY movempr, movmatr, movdataHAVING sum(movvalor) != 0

 

é isto ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não Motta. Vou ter que fazer de forma Luzitana mesmo. Valeu!!

Depois vou descrever como fiz pra ver se teria ou não a solução em uma única query.

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.