1

我对编码比较陌生,并尝试过寻找解决方案,但不完全确定如何表达我的问题。实现我需要的结果的最简单方法是什么,如以下示例中所述?我正在使用 MSSQL。

SELECT Unit, Quantity FROM SomeTable WHERE Parameter1 = 'x'

给我结果:

单位 | 数量
---------------
一个 | 10
乙 | 10
c | 10
一个 | 10

这是我需要的结果:

单位 | 数量
---------------
一个 | 20
乙 | 10
c | 10

任何帮助将不胜感激。

4

2 回答 2

3

添加一个GROUP BY这样就可以为您解决问题。

SELECT Unit, Sum(Quantity)
FROM SomeTable
WHERE Parameter1 = 'x'
GROUP BY Unit
于 2012-07-13T11:05:17.863 回答
0

当您选择行时,SQL 会单独查看每一行,除非使用“聚合函数”。例如,聚合是 sum()、count()、avg()、min() 和 max()。(还有更多,在许多供应商的 SQL 包中。)这就是为什么您最终在结果集中得到 A 的两个“副本”;SQL 单独显示它们中的每一个,因为它们是两个不同的行。相反,您可以使用这些函数来查找聚合值。

当 SQL 查看聚合时,它需要知道要检查哪些行。默认情况下,如果查询中使用的所有数量都是聚合的,它会查看所有行。例如,在您的示例中,Select Sum(Quantity) from SomeTable where Parameter1='x'将返回40, 列中与条件匹配的所有值的总和。

您正在寻找一组行的聚合,在这种情况下,是具有相同Unit值的项目。要告诉 SQL,您需要告诉它如何使用Group By子句定义组。正如 Bluefeet 的回答所指出的,这可以通过编写:

SELECT Unit, Sum(Quantity)
FROM SomeTable
WHERE Parameter1 = 'x'
GROUP BY Unit

作为一般指针,如果您想在不分组的情况下查找聚合和值,则查询将失败。例如,如果您不想将查询限制为 Parameter1='x',而是想查看与行关联的参数,您可能只想将其添加到选择列表中,SELECT Unit, Sum(Quantity), Parameter1...然后运行查询。这是行不通的,因为 SQL 不知道要查看哪一行来查找参数。

如果需要,您可以按多列分组。如果需要更复杂的组,可以使用更多技巧。例如,您可以对 case 语句或行的函数进行分组,以查找所有偶数项目的总和,或超过 100 个单位的订单的平均订单大小。

于 2012-07-13T15:24:44.707 回答