【发布时间】:2017-12-06 19:51:53
【问题描述】:
我有一个表,其中包含一个分组列和一个数字列,我想对其进行汇总。我的桌子是这样的:
Person Object Count
-------- --------- -------
John apples 1
John pears 6
John ferrari 10
Mike porsche 3
Mike ferrari 1
我想创建一个表,每人返回一行,并返回包含一组对象的几列。在这个例子中,苹果和梨都是水果,而法拉利和保时捷都是汽车。我的结果表如下所示:
Person Fruits Cars
-------- -------- ------
John 7 10
Mike 0 4
我有一个帮助表,将每个对象分配给一个组。组的数量是一成不变的,但我可能会在每个组中添加更多对象。这就是我创建这个帮助表的原因,这样当我的数据中有新对象时,我可以简单地添加一行。例如,我以后可能会添加李子(也是一种水果)或丰田(也是一种汽车),但我绝不会添加既不是汽车也不是水果的东西。
Object Group
--------- --------
apples fruits
pears fruits
ferrari cars
porsche cars
我的解决方案是以下查询:
SELECT
Person,
SUM(CASE WHEN Object IN (SELECT Object FROM help_table WHERE Group = 'fruits') THEN Count END) AS Fruits,
SUM(CASE WHEN Object IN (SELECT Object FROM help_table WHERE Group = 'cars') THEN Count END) AS Cars
FROM start_table
GROUP BY Person
它返回以下错误:
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
我正在寻找其他解决方案来达到预期的结果。在查询中指定哪些对象属于每个组很容易,但我更喜欢将新对象添加到表中,而不必将它们硬编码。
【问题讨论】:
标签: sql-server tsql sum case