Sql com campos duplicados

Firebird

28/02/2012

galera eu tenho uma tabela de pedidos onde eu tenho mais de uma forma de pagamento, e estou com um problema na seguinte opção.

Se um cliente comprou em 3 formas de pagamento diferentes, ex: dinheiro, cheque a prazo e boleto, como faço para mostrar as tres no select?

eu tentei assim mas dá erro:


select
pedidos.ped_id,
pedidos.tipo_id,
tipo_venda.tipo,
pedidos.data_cad,
pedidos.data_emissao,
pedidos.data_alt,
pedidos.data_entrega,
pedidos.data_trasmitida,
pedidos.data_cancelamento,
pedidos.data_fechamento,

pedidos.cli_id,
clientes.cli_razao,
clientes.cli_cpf_cnpj,
clientes.rot_id,

pedidos.fun_id,
funcionarios.fun_apelido,

pedidos.ped_total,
pedidos.ped_desconto,
case
when pedidos.status = 0 then PENDENTE
when pedidos.status = 3 then ANALISE
when pedidos.status = 2 then CANCELADO
when pedidos.status = 1 then FINALIZADO
end as status,
pedidos.imei,
pedidos.gps,
pedidos.orc_id,
pedidos.nfe_id,
pedidos.op,
pedidos.cancelado,
pedidos.usu_id,
usuarios.usu_login,
pedidos.ped_obs,
forma_pagamento.fpgto_id,
forma_pagamento.fpgto_descricao,
condicao_de_pagamento.cpgto_id,
condicao_de_pagamento.cpgto_descricao,
condicao_de_pagamento.cpgto_id2,
- condicao_de_pagamento.cpgto_descricao,
condicao_de_pagamento.cpgto_id3,
condicao_de_pagamento.cpgto_descricao
from pedidos
inner join clientes on (pedidos.cli_id = clientes.cli_id)
inner join funcionarios on (pedidos.fun_id = funcionarios.fun_id)
inner join usuarios on (pedidos.usu_id = usuarios.usu_id)
inner join tipo_venda on (pedidos.tipo_id = tipo_venda.tip_id)
left join forma_pagamento on ((pedidos.fpgto_id = forma_pagamento.fpgto_id) or
(pedidos.fpgto_id2 = forma_pagamento.fpgto_id) or
(pedidos.fpgto_id3 = forma_pagamento.fpgto_id))
left join condicao_de_pagamento on ((pedidos.cpgto_id = condicao_de_pagamento.cpgto_id) or
(pedidos.cpgto_id2 = condicao_de_pagamento.cpgto_id) or
(pedidos.cpgto_id3 = condicao_de_pagamento.cpgto_id))
Sidney Abreu

Sidney Abreu

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

28/02/2012

Cara, se você pode ter um número indefinido de formas de pagamento em um pedido, eu sugiro fazer de uma das seguintes formas:
- Criar um campo bem definido para cada forma de pagamento existente (DINHEIRO, CHEQUE, BOLETO, etc)
- Criar uma tabela para relacionar o pedido com as formas de pagamento, por exemplo, uma tabela com o código do pedido, da forma de pagamento, o valor, prazo e outras informações necessárias.

Já tentei fazer como você está tentando uma vez, mas encontrei alguns problemas como esse que você está enfrentando, aí optei por usar uma das formas supracitadas.

Boa sorte.
GOSTEI 0
Gustavo Bretas

Gustavo Bretas

28/02/2012

Sidney, eu não entendi uma coisa, como vc pode ter multiplas formas de pagamento se o relacionamento da forma de pagamento esta 1:1 no pedido?
GOSTEI 0
POSTAR