如何重写此查询以获取正确的小计

时间:2014-06-19 18:55:59

标签: mysql stored-procedures

作为从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;

对于单行项目会发生什么,它需要数量*销售价格才能获得小计值,这是正确的。但是,对于多行项目,它不需要数量乘以,因为销售价格已经是其他行的汇总。

我不知道该怎么做。这是一个非常复杂的查询,我无法理解我需要添加额外逻辑来捕获多行的情况。

1 个答案:

答案 0 :(得分:0)

我选择做的是:

我设置了一个变量

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

这将告诉我它是单行顺序还是多行顺序。然后我只是在那里扔了一个if语句并重复删除了数量位的代码。不像我希望的那样优雅,但它有效。