2015-02-19 7 views
0

Я хотел бы получить 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

Оба являются одной и той же таблицей или другой таблицей? – Arun

+0

Существует только одна таблица со всеми строками порядка без общего расчета – user2775380

+0

Это представление данных, а не то, для чего предназначен SQL. Играйте с UNION ALL, group by/sum и т. Д., Dummycolumns для заказа и т. Д., И это можно сделать. – jarlh

ответ

1

агрегирования по заказу и добавляющий итога.

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

Это обеспечивает необработанные данные в табличной структуре. Для создания специально отформатированного outpout вам понадобится инструмент отчетности. у некоторых rdbms есть клиенты командной строки, которые могут помочь вам с этим (например, sqlplus oracle), если вы не ожидаете слишком большого результата.

Редактировать (за комментарий ФП в):

Включая линии оригинальных порядка и представления строк в желаемом порядке требует дополнительного оборудования:

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 колонны зависит от фактический формат кодов заказов (редко проблема, поскольку их формат обычно ограниченным образом).

Как уже говорилось, для выходов вы можете выбрать подходящий инструмент.

+0

Будет ли у меня так же порядок строк? – user2775380

+0

Нет. Это когда вам нужен другой UNION ALL с группой. – jarlh

0

Пожалуйста, попробуйте:

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

надеюсь, что это помогает.

+1

Это предпочтительный способ построения набора результатов, но синтаксис зависит от диалекта sql, iirc. – collapsar

Смежные вопросы