Firebird在select语句中多次求和,具体取决于同一行

时间:2017-03-14 05:20:37

标签: firebird firebird2.5

这与我之前所做的完全相同的问题只是差异我试图在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

1 个答案:

答案 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