2017-03-14 23 views
1

これは以前と同じ問題ですが、これはfirebird SQLで同じselectを実行しようとしています。同じ行のフィールドのブール値に応じて、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 

答えて

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 
関連する問題