Firebird根据同一行字段中的布尔值在select语句中进行多次求和

Firebird根据同一行字段中的布尔值在select语句中进行多次求和,firebird,firebird2.5,Firebird,Firebird2.5,这与我之前的问题完全相同,唯一的区别是我试图在firebird sql上运行相同的select 我试图在一行中列出既有费用又有付款的帐户,费用和付款之间的唯一区别是字段信用,它是一个布尔值,为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 jo

这与我之前的问题完全相同,唯一的区别是我试图在firebird sql上运行相同的select

我试图在一行中列出既有费用又有付款的帐户,费用和付款之间的唯一区别是字段信用,它是一个布尔值,为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

Firebird不支持DML中的
IF
语句,但您可以使用
CASE
。你不需要用“和中求和”。试着这样做:

选择
H.不,
作为借项的总额(G.贷记=0,则F.押记结束),
总额(当G.信用=1时,则F.收费结束)作为信用
来自Transf
左连接横接头G在F上。横接头=G。序号
在H.SeqNo=G.Account上左连接帐户H
按H.AccountNo分组