2015-02-06 32 views
3

我有一个小小的SQL任务来实现,但说实话我不知道如何处理它。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(FE 500,501),我将“添加一行”到结果集其内容如下:

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

怎么可能我做到了?我是否需要连接多个select语句,或者是否有一种汇总的方式来按照certrain产品id进行分组?

在此先感谢。

+0

此查询如何使用?如果您在报告系统中使用它,为什么不让报告工具处理小计? – qxg 2015-02-06 11:18:40

+0

你如何确定你想总结的ID? – flo 2015-02-06 11:22:30

+0

这是可以在表示层完成的事情,为什么在数据库中? – 2015-02-06 12:09:09

回答

4

正如评论中的其他人所指出的那样,报告解决方案本身处理这类逻辑更合理,即使该软件与Excel一样简单。但是,如果我正确理解您的要求,则可以使用两个SELECT查询中的UNION;但是,如果我正确理解了您的要求,则可以使用两个SELECT查询中的一个UNION;

有点像;

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的使用性能更好,并且在不太可能发生所有列值与现有行匹配的情况下防止删除新行。

我希望这会有所帮助。

+1

感谢Rudi - 这工作得很好!我知道这是一个肮脏的黑客,但不希望它在他们的Excel表单,他们只是想运行查询并看看。谢谢! – madhippie 2015-02-06 14:44:13

相关问题