当总计为正数时将订单计为“订单”,但当总计为负数时计为“退货”

Posted

技术标签:

【中文标题】当总计为正数时将订单计为“订单”,但当总计为负数时计为“退货”【英文标题】:Count Orders as "Orders" when total is postive, but as "Returns" when total is negative 【发布时间】:2021-03-24 15:32:22 【问题描述】:

我正在处理一个查询以跟踪生产力。它先按天,然后按销售代表。例如:

                          Monday      Tuesday
      Rep 1
            Orders:
            Total Items:
            Total Sales$:
      Rep 2
            Orders:
            Total Items:
            Total Sales$:
      Rep 3
            Orders:
            Total Items:
            Total Sales$:

目前我有一个查询可以执行此操作,但它只是总订单数,它不会在订单和退货之间分解。所以可能有 4 个“订单”和 1 个“订单”,其中该订单的总数为负数,应该算作“退货”,但它与“订单”分组,因此它会输出 5。这就是我想要的报告查看:

                          Monday      Tuesday
      Rep 1
            Orders:
            Returns:
            Total Items:
            Total Sales$:
      Rep 2
            Orders:
            Returns
            Total Items:
            Total Sales$:
      Rep 3
            Orders:
            Returns:
            Total Items:
            Total Sales$:

这是我目前将所有“订单”组合在一起的查询:

SELECT 
mh.Date,
ctls.SalesRep,
COUNT(DISTINCT mh.Orders) as "Orders",
SUM(md.simd1_TotalItems),
SUM(md.simd1_TotalSales)


FROM c_file c LEFT JOIN simh_file mh on c.SalesRep = mh.SalesRep
              LEFT JOIN simd_file md on md.Orders = mh.Orders AND 
              md.simd_seq = mh.simh_seq
              LEFT JOIN ctl_file_s ctls on ctls.SalesRep = mh.SalesRep

WHERE mh.Date >= 20210101
GROUP BY mh.Date, ctls.SalesRep

但我希望能够将“订单”计为销售额为正数的订单,而当订单销售额为负数时,我将计为“退货”。对这样的事情有什么建议吗?

【问题讨论】:

这不是您的查询 :-( 是的:(我明白你为什么这么说,我更改了选择中的名称以使内容更易于阅读,但没有在连接中更改它们:/ 不。这仍然不是您的查询。为什么不简单地粘贴您的查询。 实际上不是:ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your mysql server version for the right syntax to use near 'FROM c_file c LEFT JOIN simh_file mh on c.SalesRep = mh.SalesRep L' at line 7 你真的不明白我改名了吗? 【参考方案1】:

很简单……一个 CASE 语句就可以解决问题:

SUM(CASE WHEN [sale amount column] > 0 THEN 1 ELSE 0) END As 'Sales'
SUM(CASE WHEN [sale amount column] < 0 THEN 1 ELSE 0) END As 'Returns'

第一个 CASE 语句给你一个 1 或 0,这取决于你的销售额是否大于零,这是一次销售,然后 SUM 为你提供该代表的销售总数。

第二个 CASE 语句相同,但金额小于 0,这是您的回报。

【讨论】:

我会试试这个,但我假设“订单”本身需要某种 GROUP。我不是在寻找售出和退货的总金额。如果“订单”的总销售额为正,则为订单。如果总销售额为负数,则为“退货”。

以上是关于当总计为正数时将订单计为“订单”,但当总计为负数时计为“退货”的主要内容,如果未能解决你的问题,请参考以下文章

复杂的嵌套聚合以获取订单总计

在数据库中缓存计算值(总和/总计)

化工行业的订单分配(考虑批号)

如何更改订单号

SQL Server 创建总计行

rails方法来计算小计和总计