SUMIF的SQL版本

SUMIF的SQL版本,sql,sum,Sql,Sum,我想了解如何为下表示例中的最后一列Total\u Concat\u Quantity编码以下总和计算 请注意,我的数据集包含数千个重复的Concat组合。我不希望从数据集中删除重复项。我不是在寻找包含硬编码信息的解决方案,例如(SUM(如果[Concat]='201201A',那么..,因为Concat的组合太多了 **TABLE 1** :- Year, Month, YYYYMM, Product, Concat, Quantity, Total_Concat_Quantity 2012

我想了解如何为下表示例中的最后一列
Total\u Concat\u Quantity
编码以下总和计算

请注意,我的数据集包含数千个重复的
Concat
组合。我不希望从数据集中删除重复项。我不是在寻找包含硬编码信息的解决方案,例如
(SUM(如果[Concat]='201201A',那么..
,因为
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

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

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

也可以将其表示为带有联接的聚合,但窗口函数更易于键入、更清晰,并且可能执行得更好。

Gordon已经提到了联接的替代方法。如果分析函数不可用,也可以将其表示为相关子查询

select *
     , ( select sum(T2.quantity) as Total_Concat_Quantity
         from T as T2 
         where T2.concat = T.concat )
from T
使用显式联接的问题是T中的行将乘以具有相同concat值的相应行数。因此,您必须进行分组和聚合(最小或最大),以获得具有原始值的单行