2016-12-28 5 views
0
OrderDetailID OrderID ProductID Quantity 
1    10248 11   12 
2    10248 42   10 
3    10248 72   5 
4    10249 14   9 
5    10249 51   40 

Я хочу суммировать все количество для каждого идентификатора заказа и после этого мне нужно суммировать все количество. я смог создать по-разному, как запросSQL: Как присоединиться к двум запросам select

SELECT OrderID, SUM(Quantity) over()AS TotalItemsOrdered 
FROM OrderDetails 
where OrderID in ('10248','10249') 
group by OrderID; 

и

SELECT SUM(Quantity) over()AS TotalItemsOrdered 
FROM OrderDetails 
where OrderID in ('10248','10249'); 

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

ответ

0

Не уверен, почему вы хотели бы этот формат ... обычный способ иметь итоговые данные по группе, а затем грандиозная Всего с GROUP BY ROLLUP - который должен существуют в большинстве продуктов баз данных.

Использование Oracle синтаксис ниже:

with inputs (OrderDetailID, OrderID, ProductID, Quantity) as (
     select 1, 10248, 11, 12 from dual union all 
     select 2, 10248, 42, 10 from dual union all 
     select 3, 10248, 72, 5 from dual union all 
     select 4, 10249, 14, 9 from dual union all 
     select 5, 10249, 51, 40 from dual 
    ) 
-- end of test data; SQL query begins below this line 
select case grouping_id(orderid) when 1 then 'TOTAL' 
            else to_char(orderid) end as orderid, 
     sum(quantity) as total_quantity 
from  inputs 
where orderid in (10248, 10249) -- assuming orderid is NUMBER, not VARCHAR 
group by rollup (orderid) 
order by orderid 
; 

ORDERID TOTAL_QUANTITY 
------- -------------- 
10248    27 
10249    49 
TOTAL    76 
2

Я думаю, что вы хотите:

SELECT OrderID, SUM(Quantity) as OrderQuantity, 
     SUM(SUM(Quantity)) OVER() as TotalItemsOrdered 
FROM OrderDetails 
WHEER OrderID in ('10248','10249') 
GROUP BY OrderID;