SUMIF的SQL版本

时间:2014-06-08 13:49:01

标签: sql sum

我想了解如何为下面示例表中的最后一列Total_Concat_Quantity编写以下SUM计算。

请注意,我的数据集包含数千种重复的Concat组合。我不打算从数据集中删除重复项。我不是在寻找包含硬编码信息的解决方案 - 例如(SUM(CASE WHEN [Concat] = '201201A' THEN..,因为Concat

的组合太多了
**TABLE 1** :- Year, Month, YYYYMM, Product, Concat, Quantity, Total_Concat_Quantity

2012 / / JAN / / 201201 / / A / / 201201A / / 11 / / 48
2012 / / JAN / / 201201 / / A / / 201201A / / 37 / / 48
2013 / / JAN / / 201301 / / B / / 201301B / / 19 / / 30
2013 / / JAN / / 201301 / / B / / 201201B / / 11 / / 30
2012 / / FEB/ / 201202 / / C / / 201202C / / 17 / / 17
2012 / / NOV/ / 201211 / / C / / 201211C / / 41 / / 54
2013 / / JAN / / 201301 / / A / / 201301A / / 53 / / 53
2013 / / FEB/ / 201302 / / B / / 201302B / / 47 / / 47
2012 / / NOV/ / 201211 / / C / / 201211C / / 13 / / 54
2013 / / FEB / / 201302 / / A / / 201302A / / 23 / / 23

2 个答案:

答案 0 :(得分:2)

大多数SQL版本都支持窗口/分析函数。这是sytnax:

select t.*, sum(quantity) over (partition by product) as TotalConcatQuantity
from table t;

也可以将此表示为带连接的聚合,但窗口函数更容易键入,更清晰,并且可能更好地执行。

答案 1 :(得分:0)

戈登已经提到过加入的替代方案。如果分析函数不可用,它也可以表示为相关子查询。

select *
     , ( select sum(T2.quantity) as Total_Concat_Quantity
         from T as T2 
         where T2.concat = T.concat )
from T

使用显式连接的问题是T中的行将乘以具有相同concat值的相应行数。因此,您必须进行分组和聚合(最小或最大)以获得具有原始值的单行。