Select com duas tabelas e registros ocultos
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:
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
Curtidas 0
Respostas
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
att
Isaac
GOSTEI 0
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
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
02/03/2015
essas tabelas/colunas possuem index?
GOSTEI 0
Sidney Abreu
02/03/2015
sim, fun_id
GOSTEI 0