none
Atribuir desconto ao cupon RRS feed

  • Pergunta

  • Estou tentando gerar um relatório com o valor de venda por produto, porém estou com uma dificuldade para trabalhar com descontos, vamos entender como funciona:

    Tenho duas tabelas uma delas tem os dados do cupom de venda (tb_cupom)

    - Colunas: Id_cupom | vl_desconto | vl_total

    Na outra eu tenho os dados de cada item do cupom (tb_cupom_item)

    - Colunas: Id_cupon_item | Id_cupon | qtd_item |vl_desconto | vl_total_ item

    Quando realizo uma compra, posso ter desconto por item e por cupom, quando vou gerar o relatório do produto A, ele está vindo com o desconto caso ele seja dado no item e não no cupom.

    O que eu quero fazer: Fazer a subtração do desconto do item (pode ser mais de um item por cupom) pelo desconto dado no cupom, e dividir pelos itens.

    Ex:

    Valor calça: 100,00

    Valor sapato: 100,00

    Caso seja comprado 10 calças com desconto total de 10,00 e 10 sapado com desconto total de 10,00 e um desconto de 5,00 no valor total da compra, o resultado do relatório tem que vir:

    - Calça: 987,50

    - Sapato: 987,50

    segunda-feira, 18 de agosto de 2014 18:48

Respostas

  • Boa noite,

    Victor, experimente fazer um teste com o script abaixo:

    declare @Tb_cupom table
    (Id_cupom int, Vl_desconto money, vl_total_pago money);
    
    insert into @Tb_cupom values
    (01, 1.80, 7.70);
    
    declare @tb_cupom_item table
    (Id_cupon_item int, Id_cupom int, qtd_item int, vl_desconto money, vl_total_item money);
    
    insert @tb_cupom_item values
    (01, 01, 2, 0.50, 1.40),
    (02, 01, 3, 1.00, 4.90),
    (03, 01, 1, 0.00, 1.40);
    
    with CTE_Desc_Cupom as
    (
        select
            c.Id_cupom,
            (c.Vl_desconto - SUM(i.vl_desconto)) / COUNT(*) as Desc_Cupom
        from @Tb_cupom as c
        inner join @tb_cupom_item as i
            on i.Id_cupom = c.Id_cupom
        group by
            c.Id_cupom,
            c.Vl_desconto
    )
    
    select 
        i.Id_cupon_item, 
        i.Id_cupom,
        i.vl_desconto + ISNULL(d.Desc_Cupom, 0) as vl_desconto
    from @tb_cupom_item as i
    left join CTE_Desc_Cupom as d
        on d.Id_cupom = i.Id_cupom
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 18 de agosto de 2014 21:35

Todas as Respostas

  • Cara ta meio estranho isso se a calça e o sapato tem o valor de 100,00 reais a peça e são 10 calç e 10 sapatos logo temos um total de R$ 2000,00.

    E um total no desconto de R$ 25,00 então a resposta esta óbvia

    seria o valor total da compra R$ 2000,00 - 25,00 (total desconto) / 2 (total de itens por categoria) = 987.5

    Seria isso msm que vc quer???


    Nome : Romy G. Moura Cargo: Analista Programador

    segunda-feira, 18 de agosto de 2014 19:00
  • Sim isso que eu quero dizer, porém você não intendeu muito bem.

    Vamos pensar agora eu vou realizar outra compra 

    2 Uvas, 3 Maçãs 1 Pêra

    Valores:

    • Uva: 1,00
    • Maçã: 2,00
    • Pera: 1,50

    Desconto de 0,50 na uva e 1,00 na maçã e 0,30 na venda total.

    Relatório

    • Uva: 1,40
    • Maçã: 4,90
    • Pera: 1,40

    Como ficaria meu banco de dados

    Tb_cupom

    Id_cupom

    Vl_desconto

    vl_total_pago

    01

    1,80

    7,70

    Tb_cupom_item

    Id_cupon_item 

    Id_cupon 

    qtd_item 

    vl_desconto 

    vl_total_ item

    01

    01

    2

    0,50

    1,40

    02

    01

    3

    1,00

    4,90

    03

    01

    1

    0,00

    1,40

    Como ficaria o SELECT ?


    segunda-feira, 18 de agosto de 2014 19:18
  • Cara não entendi muito bem mas seria isso?

    select 
    	citem.id_cupom as [Compra],
    	citem.qtd_item as [Qauntidade],
    	cp.vl_total_pago as [Subtotal],
    	cp.vl_desconto as [Desconto],
    	(cp.vl_total_pago - cp.vl_desconto) as [Total]
    from tb_cupom_item citem
    	inner join tb_cupom cp on cp.id_cupom = citem.id_cupom

    Ve se ajuda


    Nome : Romy G. Moura Cargo: Analista Programador

    segunda-feira, 18 de agosto de 2014 19:42
  • Ainda não porque teria que ser uma média ponderada em cima de cada categoria
    segunda-feira, 18 de agosto de 2014 20:05
  • Boa noite,

    Victor, experimente fazer um teste com o script abaixo:

    declare @Tb_cupom table
    (Id_cupom int, Vl_desconto money, vl_total_pago money);
    
    insert into @Tb_cupom values
    (01, 1.80, 7.70);
    
    declare @tb_cupom_item table
    (Id_cupon_item int, Id_cupom int, qtd_item int, vl_desconto money, vl_total_item money);
    
    insert @tb_cupom_item values
    (01, 01, 2, 0.50, 1.40),
    (02, 01, 3, 1.00, 4.90),
    (03, 01, 1, 0.00, 1.40);
    
    with CTE_Desc_Cupom as
    (
        select
            c.Id_cupom,
            (c.Vl_desconto - SUM(i.vl_desconto)) / COUNT(*) as Desc_Cupom
        from @Tb_cupom as c
        inner join @tb_cupom_item as i
            on i.Id_cupom = c.Id_cupom
        group by
            c.Id_cupom,
            c.Vl_desconto
    )
    
    select 
        i.Id_cupon_item, 
        i.Id_cupom,
        i.vl_desconto + ISNULL(d.Desc_Cupom, 0) as vl_desconto
    from @tb_cupom_item as i
    left join CTE_Desc_Cupom as d
        on d.Id_cupom = i.Id_cupom
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 18 de agosto de 2014 21:35