繁体   English   中英

带有条件的SQL SUM组

[英]SQL SUM group with condition

我有SQL Server表名tbInvoice看起来像这样:

在此输入图像描述

我对结果的期望是这样的:

在此输入图像描述

我们的想法是从total_inv + total_1 + total_2计算GRAND TOTAL,其中状态为0(status_inv,status_1,status_2)为VENDOR所有行组。

我做了这样的事情,但没有奏效:

SELECT DISTINCT vendor, 
 SUM(CASE WHEN total_inv = 0 AND total_1 = 0, and total_2 = 0 THEN (total_inv + total_1 + total_2)  
          WHEN total_inv = 0 AND total_1 = 0, and total_2 = 1 THEN (total_inv + total_1)  
          WHEN total_inv = 0 AND total_1 = 1, and total_2 = 0 THEN (total_inv + total_2)
          WHEN total_inv = 0 AND total_1 = 1, and total_2 = 1 THEN (total_inv)
          WHEN total_inv = 1 AND total_1 = 0, and total_2 = 0 THEN (total_1 + total_2)  
          WHEN total_inv = 1 AND total_1 = 0, and total_2 = 1 THEN (total_1)  
          WHEN total_inv = 1 AND total_1 = 1, and total_2 = 0 THEN (total_2)
          WHEN total_inv = 1 AND total_1 = 1, and total_2 = 1 THEN 0 END) GRAND TOTAL FROM tbInvoice GROUP BY vendor  

非常感谢你。

您在CASE表达式中混淆了状态和总计。 而且,你使它变得比必要的更复杂。 您希望在状态为0时累加总计:

SELECT
  vendor, 
  SUM(CASE WHEN status_inv = 0 THEN total_inv ELSE 0 END) +
      CASE WHEN status_1   = 0 THEN total_1   ELSE 0 END) +
      CASE WHEN status_2   = 0 THEN total_2   ELSE 0 END)) AS grand_total
FROM tbInvoice
GROUP BY vendor  
ORDER BY vendor;

没有任何数学技巧;-)

你想到的表达式更容易:

SELECT vendor, 
       sum( total_inv + total_1 * status_1 + total_2 * status_2) GRAND TOTAL 
FROM tbInvoice 
GROUP BY vendor

说明

在某些情况下(当status = 0时),您不希望将值聚合到总计,在其他情况下(当status = 1时)您想要。 然后,它就像使用value * status一样简单,因为value * 0 = 0value * 1 = value

供您参考

不建议使用 Stack Overflow 屏幕截图 ,最好使用简单的复制粘贴文本。 另外,我恭喜您将您的工作发布到解决方案中。

编辑

从OP评论看起来我应该切换status字段。

SELECT vendor, 
       sum(   total_inv * (1-status_inv) 
            + total_1   * (1-status_1) 
            + total_2   * (1-status_2)
          ) as GRAND TOTAL 
FROM tbInvoice 
GROUP BY vendor

希望这会有所帮助,在这里我得到所有总数的总和并在乘以状态后减去总数,以便消除状态为1的那个,我选择此方法来保持此SQL代码ANSI,

    SELECT vendor, 
    SUM( total_inv + total_1  + total_2 -( total_inv*status_inv + total_1 * status_1 + total_2 * status_2)) as GRAND TOTAL 
    FROM tbInvoice 
    GROUP BY vendor

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM