2017-03-14 5 views
1

이것은 내가 firebird sql에서 동일한 select를 실행하려고 시도 할 때와 정확히 같은 질문입니다. 나는 하나의 라인과 요금 및 지불 사이의 유일한 차이에 자신의 요금뿐만 아니라 지불 모두 계정을 나열하려동일한 행의 필드에있는 부울 값에 따라 select 문에서 Firebird 다중 합계

이 필드 신용 인 부울 1 또는

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 

0 이것은 내가 결과가

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 

답변

2

Firebird는 DML에서 IF 문을 지원하지 않지만 CASE을 사용할 수 있습니다. 그리고 "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