SQL - 像Excel sumif

时间:2014-08-06 11:07:04

标签: sql excel aggregate-functions sumifs

我一直试图寻找解决方案,但可能已经错过了这个问题的解决方案,这个问题暂时让我感到唠叨。

如何对另一列中的行相似的一列中的值求和?在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'相同的数量 - 在行级别而不是在文章级别上总结。

任何帮助?

谢谢, ç

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。使用ANSI标准窗口函数是最简单的:

select t.*, sum(OrderQty) over (partition by ArticleId) as TotalOrdered
from mytable t;

如果您的数据库不支持此功能,您仍然可以执行此操作。例如,您可以使用group byjoin或相关子查询。以下是相关子查询的示例:

select t.*,
       (select sum(OrderQty)
        from mytable t2
        where t2.ArticleId = t.ArticleId
       ) as TotalOrdered
from mytable t;