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

subconsulta


wellington silva

Pergunta

ola,

tenho uma tabela do clientes,financeiro onde preciso fazer uma consulta assim:

tenho uma tabela de financeiro onde constam os lancamentos pagos e em abertos preciso fazer um filtro de clientes com duplicatas vencidas a mais de (Ex.90dias) mais não listas somentes os lancamentos com + de 90d. Caso este cliente conste entre os registros desta faixa com + de90d vai listar todos os lancamentos em aberto do cliente.

utilizo tabelas myisam,mysql 5.0. tabela de parceiro (codparc,nome,...) tabela financeiro(recdesp,empresa,especie,vencimento,valor,databaixa,etc.)

agradecidamente

wellington andrade silva

wellingtom_A_S@hotmail.com

wetinsilva.spaces.live.com

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'wellington silva'

Por qual(is) campo(s) estas tabelas se relacionam?

Razão: o que você passou não foi suficiente para determinar um relacionamento entre as tabelas.

Link para o comentário
Compartilhar em outros sites

  • 0

pelo campo codparc no financeiro, mais independente da tapela de clientes, tenho no financeiro um campo codparc que é o codigo do cliente estou tentando fazer um bordero de cobranca.

preciso pegar ex. todos os clientes que devem para mim dentro de um periodo de 90d. e depois imprimir todos os debitos destes clientes mais, independente se esta dentro dos 90 preciso imprimir todos. Não sei se ficou claro ???

aguardando resposta

Link para o comentário
Compartilhar em outros sites

  • 0

ola pessoal penso eu que poderia ficar assim mais não sei como encaixar o codigo

select * from recdesp as recdes1 where (recdes1.vencimento between '2009-04-01' as '2009-04-30' ) and (recdes1.valor > 0) group by codparc
union 
select * from recdesp as recdes2 where (recdes2.codparc = recdes1.codparc)

ou seja no primeiro select eu pego todos os clientes que estao com duplicatas abertas no periodo e no seguno pego todos os lancamentos dos clientes que estao com duplicatas abertas. Acho que assim fica melhor para explicar so que quando vou executar esse comando o mysql não considera valido o

"recdes1.codparc" da 1ª tabela. So que ainda teria o problema de eliminar os registros listados na 1º tabela senao fica em duplicidade.

aguardo resposta

agradecidamente

wellington andrade silva

Editado por Denis Courcy
Melhoria de entendimento
Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'wellington silva'

Quanto a

select * from recdesp as recdes1 where (recdes1.vencimento between '2009-04-01' as '2009-04-30' ) and (recdes1.valor > 0) group by codparc

Pelo que você passou no primeiro post deste tópico "recdesp" é atributo da tabela financeiro.

No tópico acima você informa que é o nome de uma tabela.

Qual é o correto?

Outra coisa, a cláusula "AS" só é usada para renomear atributos(campos). (Ver manual do MySQL Sintaxe do SELECT)

Mais uma, GROUP BY é cláusula de agrupamento. A cláusula correta em seu exemplo é ORDER BY.

Link para o comentário
Compartilhar em outros sites

  • 0

'wellington silva'

Pensei em uma solução que poderá te ajudar

Veja

SELECT IF((recdes1.vencimento between '2009-04-01' as '2009-04-30' ) and (recdes1.valor > 0) , "Vencida", "não Vencida") AS POSICAO, <relacione-os-demais-campos>
FROM financeiro
ORDER BY POSICAO DESC

Link para o comentário
Compartilhar em outros sites

  • 0

Moderador grato pela atenção,

recdesp é o nome da tabela do financeiro

-codparc é um campo de dentro da tabela do financeiro que identifica o codigo do cliente

cdsConsCliente é o nome do clientdataset que fiz a consulta para filtrar somente os clientes

cdsRecDesp é o nome do clientdataset que fiz a 2ª consulta para imprimir

resolvi o problema assim:

cdsConsCliente.sql.text := 'select codparc from recdesp where vencimento between '2009-03-30' and '2009-06-30' group by codparc';
fazendo isso eu sei quem são os clientes que estao com duplicatas em aberto nos ultimos 90dias. então agora para imprimir todas as duplicatas deles vencidas 2º cdsrecdesp.sql.text := 'select * from recdesp where vencimento <= '2009-06-30' ; codigo do delphi:
sSQL := '';
i:=1;
if not cdsconsCliente.isNull then
   sSQL := ' and ( ';

cdsConsCliente.first;
while not cdsConsCliente.eof do
begin
   if i > 1 then
      sSQL := sSQL + '  or ';
   sSQL := sSQL + ' (recdesp.codparc = '+cdsConsCliente.fieldbyname('CodParc').AsString+') ';
   inc(i);
   cdsConsCliente.next;
end;

if sSQL <> '' then
   sSQL := sSQL + ' ) ';

cdsrecdesp.sql.add(sSQL);

---------------------------------------------------------------------------------------------------------------

assim fui adicionando o resultado da 1ª tabela igualando o cliente na 2º agora me de uma dica tipo o resultado da 1ª(cdsConsCliente) é de +/- 400 registros, e fui igualando os clientes que eu queria que fossem para o relatorio, ate ai tudo bem agora, tem algum problema com relacao a instabelidade,agilidade,... a query ficar muito grande???

Agradecidademente

wellington andrade silva

Editado por Denis Courcy
Melhorar entendimento
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...