帮助计算税收和折扣

时间:2011-02-03 11:11:35

标签: sql mysql

我在计算每件商品的税收和折扣方面遇到了问题,主要是因为我不确定订单应该是什么。我可以在计算器上做到这一点没有任何问题,但编写SQL是一个不同的故事。总列由朋友完成并按预期工作。基于他的总列,我添加了taxtotal列,似乎给出了正确的结果。我仍然对折扣有问题。

有2个折扣列。一个是可以在库存中设置的初始折扣和可以由店员应用的第二个折扣。折扣列为op.discountp.discount。没有单独的折扣表,只是两个连接中的列。

我想确保我的taxtotal专栏也是正确的,所以如果有人看到问题或更好的写作方式,我会感激任何建议。

SELECT
    p.tax_state as tax_state,
    p.tax_fed as tax_fed,
    p.price AS price,
    op.quantity AS quantity,
    op.discount AS discount,
    (p.tax_state + p.tax_fed) AS tax,
    ( ( p.tax_state + p.tax_fed ) / 100 ) * ( p.price * op.quantity - ( p.price * op.quantity * op.discount + p.discount /100 ) ) AS taxtotal,
    (p.price * (1 + ((p.tax_state + p.tax_fed) / 100)) * (1.0 - op.discount) * op.quantity) AS total
FROM pos_order o
JOIN pos_item_order op ON op.order_id = o.order_id
JOIN inv_item p ON p.item_id = op.item_id

2 个答案:

答案 0 :(得分:1)

如果可以创建功能,请执行此操作


SELECT
    p.tax_state as tax_state,
    p.tax_fed as tax_fed,
    p.price AS price,
    op.quantity AS quantity,
    op.discount AS discount,
    (p.tax_state + p.tax_fed) AS tax,
    taxtotal(p.tax_state , p.tax_fed, p.price ,op.quantity, op.discount ) AS taxtotal
    valueTotal(p.tax_state , p.tax_fed, p.price ,op.quantity, op.discount ) AS total
FROM pos_item_order op 
JOIN inv_item p ON p.item_id = op.item_id


创建此功能


DROP FUNCTION IF EXISTS `taxtotal`;
CREATE DEFINER=`root`@`localhost` FUNCTION `taxtotal`(`tax_state` double,`tax_fed` double,`price` double,`quantity` INT,`discount` double) RETURNS double
BEGIN
    RETURN ( ( `tax_state` + `tax_fed`) / 100 ) * ( `price` * `quantity` - ( `price` * `quantity` * `discount`/100 ) );
END
;;
DELIMITER ;
DROP FUNCTION IF EXISTS `valueTotal`;
CREATE DEFINER=`root`@`localhost` FUNCTION `valueTotal`(`tax_state` double,`tax_fed` double,`price` double,`quantity` INT,`discount` double) RETURNS double
BEGIN
    RETURN (p.price * (1 + ((p.tax_state + p.tax_fed) / 100)) * (1.0 - op.discount) * op.quantity);
END
;;
DELIMITER ;

答案 1 :(得分:0)

我认为你的意思是

( p.price * op.quantity * ((op.discount + p.discount) / 100 ))

有额外的括号,因为multiply has a higher precedence than add - 假设这些都是百分比折扣?