我想收到像这样的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
这可能吗?
感谢您的帮助
答案 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;
希望这会有所帮助。