我一直试图寻找解决方案,但可能已经错过了这个问题的解决方案,这个问题暂时让我感到唠叨。
如何对另一列中的行相似的一列中的值求和?在Excel中我知道sumif()函数给了我完美的结果,但在SQL中我不能......
我有以下列 - 我想添加所有'OrderQty'行,其中'Article'是相同的:
Article Order OrderQty
5710986678708 931714523 2,00
5710986678708 931714554 2,00
5710986678708 931714532 2,00
5710986678708 931714515 2,00
5710987052460 954466387 1,00
5710987052460 954466405 1,00
5710987052460 954466404 1,00
5710987052460 931714450 2,00
5710987052460 931714482 2,00
5710987052460 931714472 2,00
5710987052460 931714474 1,00
5710986678692 954466466 2,00
5710986678692 954466483 1,00
5710986678692 954466484 2,00
5710986678692 954466464 1,00
5710986678692 954466501 1,00
5710986678692 954466473 1,00
我的输出应该是这样的:
Article Order OrderQty TotalOrdered
5710986678708 931714523 2,00 8,00
5710986678708 931714554 2,00 8,00
5710986678708 931714532 2,00 8,00
5710986678708 931714515 2,00 8,00
5710987052460 954466387 1,00 10,00
5710987052460 954466405 1,00 10,00
5710987052460 954466404 1,00 10,00
5710987052460 931714450 2,00 10,00
5710987052460 931714482 2,00 10,00
5710987052460 931714472 2,00 10,00
5710987052460 931714474 1,00 10,00
5710986678692 954466466 2,00 8,00
5710986678692 954466483 1,00 8,00
5710986678692 954466484 2,00 8,00
5710986678692 954466464 1,00 8,00
5710986678692 954466501 1,00 8,00
5710986678692 954466473 1,00 8,00
在Excel中,我会这样做 - 假设“文章”是A列:
= SUMIF( '第'; 'A2'; 'OrderQty')
我尝试过使用Case语句,但是在'TotalOrdered'列中它返回与'OrderQty'相同的数量 - 在行级别而不是在文章级别上总结。
任何帮助?
谢谢, ç
答案 0 :(得分:1)
有几种方法可以做到这一点。使用ANSI标准窗口函数是最简单的:
select t.*, sum(OrderQty) over (partition by ArticleId) as TotalOrdered
from mytable t;
如果您的数据库不支持此功能,您仍然可以执行此操作。例如,您可以使用group by
和join
或相关子查询。以下是相关子查询的示例:
select t.*,
(select sum(OrderQty)
from mytable t2
where t2.ArticleId = t.ArticleId
) as TotalOrdered
from mytable t;