这与我之前所做的完全相同的问题只是差异我试图在firebird sql上运行相同的选择。
我正在尝试列出帐户的费用以及单行付款,费用和付款之间的唯一区别是字段Credit,它是布尔值1或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
这就是我希望结果看起来像
H.Accounts Debits Credits
000221 131.00 NULL
000222 287.70 NULL
000223 70980.20 NULL
000224 13280.42 NULL
但这是我得到的错误信息:
ISC ERROR CODE:335544569
ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -104
Nested aggregate functions are not allowed
答案 0 :(得分:2)
Firebird不支持DML中的IF
语句,但您可以使用CASE
。而且你不需要使用“sum sum sum”。尝试这样的事情:
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