【发布时间】:2015-04-24 18:01:12
【问题描述】:
我有下表形式的数据。我在 Quantity(MG) 的最后一列应用了 sum 的聚合函数。
ITEM STORE Quantity(MG)
Rice Bags ABC 150
Sugar Bags ABC 200
Rice Bags NEW 50
Sugar Bags New 20
Rice Bags Alpha 25
我的 Select SQL 看起来像这样。
Select ITEM, STORE, SUM(Quantity(MG)
From....
.........
.........
Group by ITEM, STORE
Having SUM(Quantity(MG) > 50
我面临的问题是有语句,我希望 SQL 比较给定项目的所有数量值的总和(比如说 Rice Bags ,即 150 + 50 +25 = 225)。但是对于上面的查询,它没有按预期工作。当我应用条件“有 SUM(数量(MG)> 50”时,它实际上将值 50 与每个唯一行进行比较,并跳过米袋数量小于 50 的行(在本例中为第 5 行)。理想情况下此行不应跳过,因为米袋数量的总和为 225,因此不应跳过米袋行。
通过设置将此过滤器应用于此组的解决方案是什么?
【问题讨论】:
-
阅读窗口集
over Partition by...它们允许您创建内联聚合总计。然后可以将其与其他聚合进行比较,而不会对基本聚合产生负面影响。真的很酷。 -
GROUP BY GROUPING SETS((),())也可能是一个选项。
标签: sql sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012