SQL - 向结果集添加额外行

时间:2015-02-06 10:41:23

标签: sql sql-server tsql

我有一个小小的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(f.e. 500,501),我将“添加一行”到结果集中,其中包含:

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

我怎么能实现这个目标?我是否必须连接多个选择语句,或者是否有一种方法可以使用汇总产品ID进行分组?

提前致谢。

1 个答案:

答案 0 :(得分:4)

正如评论中的其他人所指出的那样,报告解决方案本身处理这种逻辑更有意义,即使该软件像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的使用效果更好,可以防止您的新行被删除,万一它的所有列值与现有行匹配。

我希望这会有所帮助。