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
这与我之前提出的问题完全相同,唯一不同的是我在 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