2017-07-06 2 views
0

Ich habe zwei Tabellen mit Eltern-Kind-BeziehungBerechnung Summe der Balance Kinder für jeden Elternteil

Table1 
| Account_no | Main_account_no | bla bla 
+------------+-----------------+---------- 
|  234 |  111  | 
|  235 |  111  | 
|  222 |  112  | 
|  220 |  112  | 

Die zweite:

Table2 
| Account_no | Balance   | bla bla 
+------------+-----------------+---------- 
|  234 |  10  | 
|  235 |  15  | 
|  222 |  55  | 
|  220 |  45  | 

Was ich brauche, um die Summe der Balance von Kinderkonten zu berechnen für jedes Elternkonto. Das erwartete Ergebnis ist

| Main_account_no | Balance | 
+-----------------+---------+ 
| 111    | 35  | 
| 112    | 100 | 

Ich versuche zu verwenden

SELECT MAIN_ACCOUNT_NO, SUM((SELECT BALANCE FROM TABLE2 WHERE ACCOUNT_NO = A.ACCOUNT_NO)) OVER (PARTITION BY MAIN_ACCOUNT_NO) 
FROM TABLE1 A 
GROUP BY MAIN_ACCOUNT_NO 

Aber ich bekomme die ORA-00979: not a GROUP BY expression

Wo habe ich falsch gemacht?

+1

I ' Ich bin mit Oracle nicht so vertraut, aber Ihre Aussage besiegt den Zweck einer Gruppe durch. Sie fordern jede Zeile auf, eine weitere Abfrage auszuführen, um die Summe für Sie abzurufen. Ich möchte nicht zu viel verraten, weil ich vermute, dass dies Hausaufgaben sind :-) –

+0

Ich würde damit beginnen, die Aggregation zu ignorieren und eine Abfrage zu erstellen, die Ihnen eine Tabelle mit 3 Spalten liefert; 'main_account_no, account_no, balance' - dann kannst du die Gruppe dazu hinzufügen. –

+0

hm du bist richtig mit 'group by' scheint nutzlos, ich werde versuchen, Ihre vorgeschlagene Ansatz, und es ist keine Hausaufgaben – Hatik

Antwort

2

Da dies offenbar nicht Hausaufgaben ... :-)

Lassen Sie uns zunächst die main_account_nos neben den Salden erhalten:

select 
    Table1.Main_account_no, 
    Table1.Account_no, 
    Table2.Balance 
from 
    Table1 
    join Table2 on Table1.Account_no = Table2.Account_no 

Gibt

| Main_account_no | Account_no | Balance   | 
+-----------------+------------+-----------------+ 
|  111  |  234 |  10  | 
|  111  |  235 |  15  | 
|  112  |  222 |  55  | 
|  112  |  220 |  45  | 

Jetzt können wir leicht Gruppe nach Bedarf:

select 
    Table1.Main_account_no, 
    sum(Table2.Balance) as total 
from 
    Table1 
    join Table2 on Table1.Account_no = Table2.Account_no 
group by 
    Table1.Main_account_no 
Verwandte Themen