2011-02-03 75 views
2

我有問題正確計算每個項目的稅和折扣,主要是因爲我不確定訂單應該是什麼。我可以在沒有任何問題的情況下在計算器上執行此操作,但編寫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 

回答

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 ; 
 
0

我想你的意思

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

有額外的括號,因爲multiply has a higher precedence than add - 假設這些都是個折扣?

+0

RUP您好,感謝。折扣價值以十進制格式存儲:.5我現在就試試這個。謝謝。 – Jim 2011-02-03 11:20:47

+0

嗯,好的 - 那麼你可能不想在這裏使用`/ 100`。但也許我誤解了。 (如果他們是絕對的折扣,即.5意味着50美分不是50%,那麼我誤解了!) – Rup 2011-02-03 11:23:08