SQL ALTERANDO RESULTADO
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:
Quando utilizo essa linha
Onde estou errando e pq esta influenciando já que é um LEFT JOIN?
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.ON (
pedidos.ped_id = contasreceber.ped_id)
Onde estou errando e pq esta influenciando já que é um LEFT JOIN?
Sidney Abreu
Curtidas 0
Respostas
Fabio Basso
20/08/2015
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.
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.
GOSTEI 0