select 语句中的 Firebird 多个总和取决于同一行字段中的布尔值

Firebird multiple sums in select statement depending on boolean value in field of same row

这与我之前提出的问题完全相同,唯一不同的是我在 firebird sql.

上尝试 运行 相同的 select

我试图在一行中列出账户及其费用和付款,费用和付款之间的唯一区别是 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

Firebird 不支持 DML 中的 IF 语句,但您可以使用 CASE。而且您不需要使用 "sum inside 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