每组相关行添加一列的总和

add total sum of one column every set of related rows

我想收到这样的 sql 输出:

ORDER #  |   LINE #   |   PRICE
---------------------------------
AAA      |    1       |    20   
AAA      |    2       |    30
AAA      |    3       |    10
TOTAL_PRICE = 60    
BBB      |    1       |    50 
BBB      |    2       |    20
TOTAL_PRICE = 70
GRAND_TOTAL = 130

这可能吗?

感谢您的帮助

按顺序汇总并添加总计。

    select order
         , sum(price) total
      from table
  group by order
 union all
    select 'grand total' order
         , sum(price) total
      from table
         ;

这提供了表格结构的原始数据。要生成特定格式的输出,您需要一个报告工具。如果您不期望太花哨的结果,一些 rdbms 有命令行客户端可以帮助您(例如 oracle 的 sqlplus)。

编辑(根据 OP 的评论):

包括原始订单行并按所需顺序显示行需要额外的机器:

    select *
      from (
                select order                seq
                     , order
                     , line
                     , price                total
                  from table
             union all
                select order || '-0'        seq
                     , 'TL('||order||')'    order
                     , null                 line
                     , total
                  from (
                            select order
                                 , sum(price)           total
                              from table
                          group by order
                       )
             union all
                select 'ZZZZZZ-9'           seq
                     , grand total'         order
                     , null                 line
                     , sum(price)           total
                  from table
               )
  order by seq
         ;

seq 列的实际组成取决于订单代码的实际格式(很少有问题,因为它们的格式通常以明确定义的方式受到约束)。

如前所述,对于更高级的输出,您最好使用合适的工具。

也请尝试:

SELECT Order, line, SUM(price) total_price
 FROM table_name
GROUP BY order, line, price WITH ROLLUP; 

希望对您有所帮助。