2014-06-19 51 views
-1

作爲從Ebay加載訂單的過程的一部分,我們將導出的文件轉儲到表中,然後使用存儲過程處理表。這對於單件訂單(即使是大批量的一件商品)也很適用,但是它會在多個商品訂單上出現不正確的小計。原因是因爲查詢,但我堅持試圖找到一種方法來獲取正確的數據而不排除事物。如何重寫此查詢以獲取正確的小計

這裏的一個單線項順序的例子(表縮短以顯示點):

Quantity | Sale Price | Shipping and Handling | Total 
    2   $10   $4.95    $24.95 

,這裏是一個多行一個

Quantity | Sale Price | Shipping and Handling | Total 
    5   $60    $14.95    $74.95 
    2   $10        
    2   $15 
    1   $10 

下面是現有的查詢:

SELECT @RecentUID, @MaxOrderNum, 
     CAST(REPLACE(`Sale Price`, '$', '') AS DECIMAL(20,5))* e.Quantity, 
     CAST(REPLACE(`Shipping and Handling`, '$', '') AS DECIMAL(20,5)), 
     CAST(REPLACE(`Sales Tax`, '$', '') AS DECIMAL(20,5)), 
     CAST(REPLACE(`Total Price`, '$', '') AS DECIMAL(20,5)), 
     STR_TO_DATE(`Paid on Date`, '%b-%d-%y'), DATE_ADD(NOW(), INTERVAL 2 HOUR), 
     'Process', 44, 'eBay Via PayPal', `Buyer Fullname`, `Buyer Address 1`, 
     `Buyer Address 2`, `Buyer City`, `Buyer State`, `Buyer Zip` 
FROM ebay_orders e 
WHERE e.`Sales Record Number` = @eBayOrderNumber 
AND e.`Paid on Date` <> '' 
AND e.imported = 0; 

單行項目會發生什麼情況,需要數量*銷售價格才能獲得小計價值,這是正確的。但是,對於多行項目,由於銷售價格已經是其他行的總和,因此不需要數量倍增。

我不知道該怎麼做。這是一個非常複雜的查詢,我無法在需要添加額外邏輯的地方抓住多線案例。

回答

0

我當選爲做到這一點:

我設置一個變量

Set @Count = Select Count(*) from ebay_orders where `Sales Record Number` = $eBayOrderNumber 

這會告訴我,如果它是一個單一的線序或多線訂單。然後,我只是在那裏拋出一個if語句,並重復刪除了數量的代碼。沒有我希望的那麼優雅,但它有效。