我要完成一些SQL任务,但老实说,我不知道该如何处理。

请考虑下表:

**Product ID | Product Name | Product Cat | Price | Amount Sold**
1            | product 1    | cat1        | 0.10  | 1000
2            | product 2    | cat1        | 0.50  | 10
....         | .....        | ......      | ...   | ....
500          | .....        | .......     | ...   | ....
501          | ......       | .......     | ....  | .....
....         | .......      | ......      | ..... | .....


为了制作销售报告,我有一个SQL查询,该查询选择所有产品,对所有已售金额字段求和,并计算产品的总销售量。现在要求我执行以下操作:

对于许多特定产品ID(例如500、501),我将在结果集中“添加一行”,内容为:

**Product ID | Product Name | Product Cat | Price | Amount Sold**
....         | .....        | ......      | ...   | ....
500          | .....        | .......     | ...   | ....
501          | ......       | .......     | ....  | .....
xxx          | Sum          | ......      | Total | Total
.....        | ........     | ........    | ..... | .....


我怎样才能做到这一点?我是否必须合并多个选择语句,或者是否有汇总方法来按特定的产品ID进行分组?

提前致谢。

最佳答案

正如评论中的其他人所指出的那样,由报告解决方案本身来处理这种逻辑更有意义,即使该软件像excel一样简单。

但是,如果我正确理解了您的要求,则可以使用两个UNION查询中的一个SELECT

就像是;

SELECT ProductID, ProductName, ProductCat, Price, AmountSold
FROM YourTable

UNION ALL

SELECT 0, 'Sum of 1 & 2', 0, SUM(Price), SUM(AmountSold)
FROM YourTable
WHERE (ProductID = 1 OR ProductID = 2);


这假设您的总和等将匹配或可转换为原始列的数据类型。 UNION ALL的使用效果更好,并且可以防止万一所有列值都与现有行匹配的情况下删除新行。

我希望这有帮助。

10-08 18:55