Fórum SQL ALTERANDO RESULTADO #529337

20/08/2015

0

Boa tarde, amigos utilizo firebird 2.5, e estou fazendo um select para o B.I e estou tendo algumas discrepâncias, sei que o problema é meu código, mas não consigo entender o pq e como solucionar.


Tenho esse código:
SELECT     pedidos.ped_id, 
           tipo_venda.tipo, 
           pedidos.data_cad, 
           pedidos.data_emissao, 
           Extract(day FROM pedidos.data_emissao) AS diacorrente, ( 
           CASE Extract(month FROM pedidos.data_emissao) 
                      WHEN 1 THEN 'JANEIRO' 
                      WHEN 2 THEN 'FEVEREIRO' 
                      WHEN 3 THEN 'MARÇO' 
                      WHEN 4 THEN 'ABRIL' 
                      WHEN 5 THEN 'MAIO' 
                      WHEN 6 THEN 'JUNHO' 
                      WHEN 7 THEN 'JULHO' 
                      WHEN 8 THEN 'AGOSTO' 
                      WHEN 9 THEN 'SETEMBRO' 
                      WHEN 10 THEN 'OUTUBRO' 
                      WHEN 11 THEN 'NOVEMBRO' 
                      WHEN 12 THEN 'DEZEMBRO' 
           END)                                    AS mes, 
           Extract(year FROM pedidos.data_emissao) AS anocorrente, 
           pedidos.data_cancelamento, 
           pedidos.data_fechamento, 
           pedidos.fun_id 
                      || ' - ' 
                      || funcionarios.fun_apelido AS codigo_vendedor, 
           funcionarios.fun_apelido               AS vendedor, 
           equipes.equipe, 
           equipes_vendas.codigo_responsavel, 
           ( 
                  SELECT first 1 f.fun_apelido 
                  FROM   funcionarios f 
                  WHERE  f.fun_id = equipes_vendas.codigo_responsavel) AS responsavel, 
           pedidos.cli_id 
                      || ' - ' 
                      || clientes.cli_razao AS codigo_razao, 
           clientes.cli_razao, 
           clientes.cli_nome, 
           clientes.cli_endereco 
                      ||', ' 
                      ||clientes.cli_numero AS cli_endereco, 
           clientes.cli_complemento, 
           clientes.cli_bairro, 
           clientes.cli_cidade, 
           clientes.cli_uf, 

           pedidos.ped_obs, 
           pedidos.fpgto_id, 
           pedidos.cpgto_id, 
           pedidos.fpgto_id2, 
           pedidos.fpgto_id3, 
           pedidos.cpgto_id2, 
           pedidos.cpgto_id3, 
           COALESCE(pedidos.total1,0) AS total1, 
           COALESCE(pedidos.total2,0) AS total2, 
           COALESCE(pedidos.total3,0) AS tota, 
           pedidos.motivo_cancelamento, 
           pedidos.ped_obs, 
           pedidos_itens.prod_id, 
           produtos.prod_ean, 
           produtos.prod_descricao, 
           produtos.prod_und_com, 
           grupo_prod.grupo, 
           produtos.for_id, 
           fornecedor.for_nome_fantasia, 
           COALESCE(pedidos_itens.pi_preco,0)    AS pi_preco, 
           COALESCE(pedidos_itens.pi_qtde,0)     AS pi_qtde, 
           COALESCE(pedidos_itens.pi_desconto,0) AS pi_desconto, 
           COALESCE(pedidos_itens.pi_total,0) + COALESCE(pedidos_itens.pi_desconto,0) as pi_bruto,
           COALESCE(pedidos_itens.pi_total,0)    AS pi_total, 
           COALESCE(pedidos_itens.custo,0)       AS custo, 
           contasreceber.conrec_id, 
           contasreceber.data_emissao, 
           contasreceber.conrec_data_vencimento, 
           contasreceber.conrec_num_parcela, 
           contasreceber.conrec_valor_parcela, 
           contasreceber.conrec_valor_total, 
           contasreceber.conrec_motivo_cancelamento, 
           iif(contasreceber.status = 0, 
           CASE 
                      WHEN ( 
                                            CURRENT_DATE - cast(contasreceber.conrec_data_vencimento AS date)) < 0 THEN 0
                                            || ' Dias' 
                      ELSE (CURRENT_DATE - cast(contasreceber.conrec_data_vencimento AS date))
                                            || ' Dias' 
           END, '0 Dias') AS nda, 
           CASE 
                      WHEN contasreceber.status = 0 THEN 'NÃO CONCILIADO' 
                      WHEN contasreceber.status = 2 THEN 'CANCELADO' 
                      WHEN contasreceber.status = 1 THEN 'CONCILIADO' 
           END AS status_contasreceber, 
           lojas.loj_nome 
FROM       pedidos_itens 
INNER JOIN pedidos 
ON         ( 
                      pedidos_itens.ped_id = pedidos.ped_id) 
INNER JOIN lojas 
ON         ( 
                      pedidos.loj_id = lojas.loj_id) 
INNER JOIN funcionarios 
ON         ( 
                      pedidos.fun_id = funcionarios.fun_id) 
INNER JOIN clientes 
ON         ( 
                      pedidos.cli_id = clientes.cli_id) 
LEFT JOIN  nfe 
ON         ( 
                      pedidos.nfe_id = nfe.nfe_id) 
INNER JOIN tipo_venda 
ON         ( 
                      pedidos.tipo_id = tipo_venda.tip_id) 
INNER JOIN produtos 
ON         ( 
                      pedidos_itens.prod_id = produtos.prod_id) 
INNER JOIN grupo_prod 
ON         ( 
                      produtos.gru_id = grupo_prod.gru_id) 
INNER JOIN fornecedor 
ON         ( 
                      produtos.for_id = fornecedor.for_id) 
LEFT JOIN  contasreceber 
ON        ( 
                      pedidos.ped_id = contasreceber.ped_id) 
LEFT JOIN  equipes_vendas 
ON         ( 
                      pedidos.fun_id = equipes_vendas.fun_id) 
LEFT JOIN  equipes 
ON         ( 
                      equipes_vendas.equ_id = equipes.equ_id) 

WHERE      lojas.loj_nome IS NOT NULL 
AND        cast(pedidos.data_emissao AS date) BETWEEN '05/17/2014' AND        '07/17/2015'


Quando utilizo essa linha
LEFT JOIN contasreceber
ON (
pedidos.ped_id = contasreceber.ped_id)
para poder pegar os dados do contas a receber ligados a venda, os valores do campo <b>pi_total</b> mudam, e quando tira essa linha e seus respectivos campos, os valores ficam corretos.

Onde estou errando e pq esta influenciando já que é um LEFT JOIN?
Sidney Abreu

Sidney Abreu

Responder

Posts

01/09/2015

Fabio Basso

Quais são as chaves primárias das tabelas pedidos e contasreceber? Todos os registros da tabela contasreceber estão ligados na pedidos? Se houver pedidos que não tenham contas a receber ainda também pode dar problema.

Tente fazer a junção dessas duas tabelas apenas para ver se o resultado é o mesmo. Se puder, mande a estrutura das tabelas para conferirmos o SQL.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar