1

我有一个查询,可以让我检索客户订单。

Select ID, OrderID, Item, Price from customerOrders
Where Order = 1

有没有一种方法可以汇总最终支付的金额并将其显示在下面,但仍然能够查看 sql 查询中所需的所有详细信息,例如

ID    |  OrderID |  Item  | Price
1     |   1      |  Book  | 9.99
2     |   1      |  DVD   | 12.99

                    total = 22.98

提前谢谢了

4

4 回答 4

1

你可以试试计算

Select ID, OrderID, Item, Price from customerOrders
Where Order = 1
COMPUTE SUM(Price)
于 2012-11-07T18:19:24.300 回答
1

两步:

1、要生成 SUM,需要使用 UNION ALL 将其添加到结果集中。UNION 添加了一个不需要的 DISTINCT 操作,即使在您的情况下它不会改变结果。

Select ID, OrderID, Item, Price from customerOrders
Where [Order] = 1
UNION ALL
Select NULL, NULL, NULL, SUM(Price) from customerOrders
Where [Order] = 1
ORDER BY CASE WHEN ID IS NULL THEN 2 ELSE 1 END, ID;

2、要按你想要的顺序排序(底部的总和),你可以使用NULL ID作为标识符。

于 2012-11-07T18:21:32.237 回答
1

从技术上讲,您想要的东西称为汇总行。SQL Server 对这种情况有一个特殊的功能,它在子句中调用ROLLUP()和使用。GROUP BY在您的特定情况下,查询基本上如下所示:

SELECT ID, OrderID, Item, SUM(Price) AS Price
FROM customerOrders
WHERE OrderID = 1
GROUP BY ROLLUP((ID, OrderID, Item))
;

您可以在 SQL Fiddle看到此查询的现场演示。可以在 MSDNROLLUP()中找到有关以及其他 GROUP BY 函数的更多信息。

于 2012-11-07T20:27:30.993 回答
0

这就是你需要的:

   Select ID, OrderID, Item, Price from customerOrders
   Where Order = 1
Union
   Select NULL, NULL, NULL, (
      Select Sum(Price) from customerOrders
      Where Order = 1
      Group By  Order
   )

更新

如果结果为空,则总数应为零,而不是空。使用更新的代码。

干杯

于 2012-11-07T18:01:12.280 回答