SQL Server 创建总计行

Posted

技术标签:

【中文标题】SQL Server 创建总计行【英文标题】:SQL Server create grand total row 【发布时间】:2016-02-14 16:22:30 【问题描述】:

我有一个包含订单详细信息的表格。如何在最后创建一个汇总所有小计的行?

SELECT 
    o.order_id, o.itemDescription as Description, 
    o.quantity_shipped as [Quantity], 
    o.itemCost as [Price each], 
    (o.quantity_shipped * CAST(o.itemCost as float)) as [Sub Total] 
FROM 
    dbo.order_items o

【问题讨论】:

【参考方案1】:

这将按订单 ID 为您提供总计

SELECT o.order_id, SUM((o.quantity_shipped * CAST    (o.itemCost as float))) as [TotalByOrderId] 
    FROM   dbo.order_items o
    GROUP BY o.order_id

这将为您提供总计

SELECT SUM((o.quantity_shipped * CAST    (o.itemCost as float))) as [GrandTotal] 
FROM   dbo.order_items o

【讨论】:

【参考方案2】:

一种方式(不是最明智的)可以是以下:

;WITH CTE AS (
    SELECT o.order_id, o.itemDescription as Description, 
        o.quantity_shipped as [Quantity], 
        o.itemCost as [Price each], 
        (o.quantity_shipped * CAST(o.itemCost as float)) as [Sub Total] 
    FROM dbo.order_items o)
SELECT *
FROM CTE
UNION ALL
SELECT NULL, 'Grand Total', NULL, NULL, SUM([Sub Total])
FROM CTE

【讨论】:

【参考方案3】:

你为什么要这样做?添加无意义的总行会使以后的处理变得更加复杂。除非您对子行进行分层汇总。

通常的处理方式是将总计作为发票表的一部分。

【讨论】:

感谢所有伸出援手的人。 igorM 提供了我想要的东西!

以上是关于SQL Server 创建总计行的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2012 Windowing 函数计算运行总计

如何在 SQL 中创建带有百分比的总计行

SQL Server Reporting Services 在聚合数据上运行总计

在 MS SQL Server 2008 的 Pivot 中计算水平总计

当 SQL Server 总计出现在第一行而不是表末尾时出错

更新表以按分组列显示总计 SQL Server 2008 R2