0

データベースハイパーファイルクライアント/サーバーを使用してwindevで作業しています。

列 (accountNumber、date、amount、operationType) を持つ Operation という名前のテーブルがあります。

operationType は、「支払い」と「引き出し」の 2 つの値を取ることができます。

アカウントで行われた操作のリストを選択したいのですが、リストには、日付、アカウント番号、金額、操作タイプ、残高の 5 つの列が表示されます。

最後の列 (残高) は、現在の日付より前にタイプ「支払い」で行われたすべての操作の合計と、現在の日付より前にタイプ「引き出し」で行われたすべての操作の合計との差である必要があります。

次のSQLコードを試します

SELECT accountNumber, date as dateOpe, amount, operationType, (SUM (SELECT Operation.amount 
                                                                   FROM Operation 
                                                                   WHERE Operation.date<=dateOpe AND Operation.operationType='payment')
                                                             -SUM (SELECT Operation.amount
                                                                   FROM Operation
                                                                   WHERE Operation.date<=dateOpe AND Operation.operationType='withdrawal')) as balance
 FROM Operation

しかし、SUMに選択を入れる権利がないというエラーが常に表示されます

誰か助けてください。そのようなSQLクエリをどのように書くことができますか。

前もって感謝します

4

3 に答える 3

0

サブクエリを使用して SUM を検索し、次のようなことを試してください。もっとエレガントな解決策があるかもしれませんが、これはうまくいくはずです。

SELECT date, accountNumber,
    operationType, deposits - withdrawals AS balance
FROM Operations o INNER JOIN (
    SELECT accountNumber, SUM(amount) AS withdrawals
    FROM Operaions
    WHERE operationType = 'withdrawal'
    GROUP BY accountNumber
) a ON  o.accountNumber = a.accountNumber
INNER JOIN (
    SELECT accountNumber, SUM(amount) AS deposits
    FROM Operations
    WHERE operationType = 'deposit'
    GROUP BY accountNumber
)b ON o.accountNumber = b.accountNumber
于 2015-06-23T18:39:15.180 に答える
0

これを試してください:

SELECT accountNumber, date, amount, operationType, 
       (SELECT SUM(amount) AS balance  
          FROM operation WHERE operationType='payment' and date=date) 
      -(SELECT SUM(amount) AS balance  
          FROM operation WHERE operationType='withdrawal' and date=date) 
       as balance  
       FROM operation
于 2015-06-23T18:35:38.003 に答える