Select com duas tabelas e registros ocultos

Firebird

02/03/2015

Galera, tenho uma procedure que calcula as vendas e recebimentos dos vendedores, e estou com um pequeno problema.

Tenho duas tabelas: VENDAS E CONTAS RECEBER

Tenho que pegar as vendas do vendedor a vista e os títulos liquidados do mesmo vendedor, só que pode ser que o vendedor só tenha recebimento ou só tenho vendas, e tb tenha os dois. Então quando faço a união das tabelas ele não traz todos os vendedores.


Exemplo:

SELECT DISTINCT pedidos.fun_id,
                    pedidos.fun_id
                                    ||' - '
                                    || funcionarios.fun_apelido AS vendedor,
                    
                    (
                           SELECT COALESCE(Sum(ped.total1),0)
                           FROM   pedidos ped
                           WHERE  ped.tipo_id < 5
                           AND    ped.fpgto_id = 1
                           AND    ped.cpgto_id = 1
                           AND    ped.status = 1
                           AND    ped.fun_id = pedidos.fun_id
                           AND    ped.loj_id = :loja
                           AND    Cast(ped.data_emissao AS DATE) BETWEEN :dt_ini AND    :dt_fim)+
                    (
                           SELECT COALESCE(Sum(ped.total2),0)
                           FROM   pedidos ped
                           WHERE  ped.tipo_id < 5
                           AND    ped.fpgto_id2 = 1
                           AND    ped.cpgto_id2 = 1
                           AND    ped.status = 1
                           AND    ped.fun_id = pedidos.fun_id
                           AND    ped.loj_id = :loja
                           AND    Cast(ped.data_emissao AS DATE) BETWEEN :dt_ini AND    :dt_fim)+
                    (
                           SELECT COALESCE(Sum(ped.total3),0)
                           FROM   pedidos ped
                           WHERE  ped.tipo_id < 5
                           AND    ped.fpgto_id3 = 1
                           AND    ped.cpgto_id3 = 1
                           AND    ped.status = 1
                           AND    ped.fun_id = pedidos.fun_id
                           AND    ped.loj_id = :loja
                           AND    Cast(ped.data_emissao AS DATE) BETWEEN :dt_ini AND    :dt_fim) as AVista
    FROM            funcionarios     LEFT JOIN      pedidos
    ON              (
                                    funcionarios.fun_id = pedidos.fun_id)
    WHERE           pedidos.status = 1
    AND             pedidos.tipo_id < 5
    AND             pedidos.loj_id = :loja
    AND             Cast(pedidos.data_emissao AS DATE) BETWEEN :dt_ini AND             :dt_fim
    AND             pedidos.fun_id STARTING WITH :codigo
    GROUP BY        funcionarios.fun_id, pedidos.fun_id,
                    funcionarios.fun_apelido
    INTO :FUN_ID,
         :VENDEDOR,         
         :avista
  DO
  FOR
    select
        coalesce(sum(vw_rel_contasreceber.recebido_total),0)
    from vw_rel_contasreceber
    where
      cast(vw_rel_contasreceber.data_pag as date) between :dt_ini and :dt_fim and
      vw_rel_contasreceber.fun_id = :fun_id  AND
      vw_rel_contasreceber.status = 'CONCILIADO'
    into :recebido
  DO

  BEGIN
    recebimento = recebido + avista;
    diferenca = (avista+aprazo)- VENDA_LIQUIDA;
    SUSPEND;
  END
  end

Sidney Abreu

Sidney Abreu

Curtidas 0

Respostas

Isaac Jose

Isaac Jose

02/03/2015

boa tarde amigo.. não conheço o firebird.. mais no caso de um uniao. tire o distinct do select pra ver e ele esta tirando alguma coisa...
att
Isaac
GOSTEI 0
Sidney Abreu

Sidney Abreu

02/03/2015

NÃO MUDA NÃO, JÁ TINHA TIRADO.
EU TENTEI FAZER UM SELECT DA TABELA VENDEDORES E FAZER OS OUTROS SELECTS EM CIMA DO FUN_ID, MAS FICA MUITO LETO
GOSTEI 0
Isaac Jose

Isaac Jose

02/03/2015

essas tabelas/colunas possuem index?
GOSTEI 0
Sidney Abreu

Sidney Abreu

02/03/2015

sim, fun_id
GOSTEI 0
POSTAR