查找我的查询总金额

时间:2012-11-07 17:58:37

标签: sql sql-server-2008 tsql

我有一个查询,允许我检索客户订单。

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 个答案:

答案 0 :(得分:1)

您可以尝试COMPUTE

Select ID, OrderID, Item, Price from customerOrders
Where Order = 1
COMPUTE SUM(Price)

答案 1 :(得分: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作为标识符。

答案 2 :(得分: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))
;

您可以看到此查询at SQL Fiddle的实时演示。有关ROLLUP()以及其他GROUP BY函数的更多信息,请参见at MSDN

答案 3 :(得分: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
   )

<强>更新

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

干杯