Sql com campos duplicados
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))
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
Curtidas 0
Respostas
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.
- 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
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