我对编码比较陌生并试图寻找解决方案,但我不完全确定如何表达我的问题。什么是最简单的方法来实现我需要的结果,详见下面的示例?我正在使用MSSQL。
SELECT Unit, Quantity FROM SomeTable WHERE Parameter1 = 'x'
给我结果:
Unit | Quantity --------------- a | 10 b | 10 c | 10 a | 10
这是我需要的结果:
Unit | Quantity --------------- a | 20 b | 10 c | 10
非常感谢任何帮助。
答案 0 :(得分:3)
添加GROUP BY
这样就可以了。
SELECT Unit, Sum(Quantity)
FROM SomeTable
WHERE Parameter1 = 'x'
GROUP BY Unit
答案 1 :(得分: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不知道要查找哪个行来查找参数。
如果需要,您可以按多列进行分组。如果需要更复杂的组,可以使用更多技巧。例如,您可以对案例陈述或行的函数进行分组,以查找所有偶数项目的总和,或者订单超过100个单位的平均订单大小。