2016-05-05 2 views
1

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

SELECT allaccounts.*, groups.TOTALGROUPAMOUNT 
FROM 
(**SELECT FROM DUMMYTABLE WHERE...**) allaccounts, 
(SELECT groupID, SUM(memberAmount) totalGroupAmount FROM(**SELECT FROM DUMMYTABLE WHERE...**) group by groupID) groups 
WHERE allaccounts.groupID = groups.groupID 

Где SELECT FROM DUMMYTABLE WHERE ... выглядит как:

GROUP|ACCOUNT|BALANCE 
A |101 |1000 
A |102 |2000 
A |103 |3000 
B |104 |4000 
B |105 |5000 
C |106 |6000 

И с запросом выше я ожидающей ниже результат:

GROUP|ACCOUNT|BALANCE|TOTALGROUPAMOUNT 
A |101 |1000 |6000 
A |102 |2000 |6000 
A |103 |3000 |6000 
B |104 |4000 |9000 
B |105 |5000 |9000 
C |106 |6000 |6000 

Так что мой вопрос можно ли сделать группировку не используя "ВЫБЕРИТЕ ИЗ ДАММИТИРОВАННОГО ГДЕ ... «дважды?

Спасибо за ваши ответы и советы заранее!

+1

Что вы после этого являются аналитическими функциями [] (http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions004.htm#SQLRF06174). Очень полезный и мощный, если он используется в правильном контексте! – Boneist

ответ

2

Использование sum() over().

select t.*, sum(balance) over(partition by grp) totalgroupamount 
from tablename t 
+0

Спасибо вам большое! Это именно то, что я искал! –

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