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

时间:2015-02-19 08:58:04

标签: sql db2

我想收到像这样的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

这可能吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

按订单汇总并添加总计。

    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列的实际构成取决于订单代码的实际格式(很少出现问题,因为它们的格式通常以明确定义的方式进行约束)。

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

答案 1 :(得分:0)

请尝试:

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

希望这会有所帮助。