2017-03-14 2 views
1

Dies ist genau die gleiche Frage wie ich vor nur Unterschied Ich versuche, das selbe auf Firebird sql zu wählen.Firebird mehrere Summen in Select-Anweisung abhängig vom booleschen Wert im Feld der gleichen Zeile

Ich versuche Accounts aufzulisten beide mit ihren Gebühren sowie Zahlungen in einer einzigen Zeile und der einzige Unterschied zwischen den Gebühren und Zahlungen ist das Feld Kredit, die eine Boolesche entweder 1 oder 0

Select H.AccountNo,SUM(IF(G.Credit=0,SUM(F.Charge),NULL)) AS Debits,SUM(IF(G.Credit=1,SUM(F.Charge),NULL)) AS Credits 
from transdetails F 
    left join transhead G on F.Transhead=G.Seqno 
    left join Accounts H on H.SeqNo=G.Account 
Group by H.AccountNo 

ist und das ist, was ich das Ergebnis wie

H.Accounts Debits  Credits 
000221  131.00  NULL 
000222  287.70  NULL 
000223  70980.20 NULL 
000224  13280.42 NULL 

aussehen möchte Aber dies ist die Fehlermeldung erhalte ich:

ISC ERROR CODE:335544569 

    ISC ERROR MESSAGE: 
    Dynamic SQL Error 
    SQL error code = -104 
    Nested aggregate functions are not allowed 

Antwort

2

Firebird unterstützt keine IF Anweisung in DML, aber Sie können CASE verwenden. Und Sie müssen nicht "Summe in Summe" verwenden. Versuchen Sie etwas wie dieses:

Select 
    H.AccountNo, 
    SUM(CASE WHEN G.Credit = 0 THEN F.Charge END) AS Debits, 
    SUM(CASE WHEN G.Credit = 1 THEN F.Charge END) AS Credits 
from transdetails F 
left join transhead G on F.Transhead=G.Seqno 
left join Accounts H on H.SeqNo=G.Account 
Group by H.AccountNo 
Verwandte Themen