2014-06-19 53 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语句,并重复删除了数量的代码。没有我希望的那么优雅,但它有效。