5

account_noを正しくグループ化し、金額を差し引くSQLクエリを作成するのに問題があります。

最初に、ACCOUNT_NO A-102が2つの異なる正しい残高ではなく、4500になることを除いて、すべてを正常に更新するこのクエリを作成しました。

select transactions.account_no, account.balance, transactions.amount,
(account.balance + transactions.amount) AS "CORRECT BALANCE"
from transactions, account
where account.account_no = transactions.account_no;

ACCOUNT_NO| BALANCE   | AMOUNT    | CORRECTBALANCE 

A-102     |  4000     |  2000     |  6000                   
A-102     |  4000     |  -1500    |  2500                   
A-222     |  8000     |  -1000    |  7000                   
A-305     |  2000     |  1300     |  3300    

account_noで合計してグループ化しようとしましたが、2つのテーブルでこれを行う方法を理解できません。これは私が試しただけのことでしたが、うまくいきませんでした。

select transactions.account_no, SUM(transactions.amount)
from transactions
group by transactions.account_no;


ACCOUNT_NO| SUM(TRANSACTIONS.AMOUNT) 
A-305     |    1300                     
A-102     |    500                      
A-222     |    -1000   

期待される結果は次のとおりです。

ACCOUNT_NO| BALANCE   | AMOUNT    | CORRECTBALANCE 

A-102     |  4000     |  500      |  4500                 
A-222     |  8000     |  -1000    |  7000                   
A-305     |  2000     |  1300     |  3300    

これは、アカウントA-102には、2つの異なる金額が出ていますが、残高が同じであるためです。

4

2 に答える 2

7

クエリでは、2つの行を1つの行にグループ化するために、アカウント番号と残高でグループ化を試すことができます。

SELECT  T.account_no
        ,A.balance
        ,SUM(T.amount) AS TotalAmount
        ,(A.balance + SUM(T.amount)) AS "CORRECT BALANCE"
FROM    transactions AS T
INNER JOIN account AS A ON T.account_no = A.account_no
GROUP BY T.account_no, A.balance;

(ちなみに、テーブルを結合する「古い」方法の代わりにANSI結合を使用しました。これは、その方法で何をしているのかがはるかに明確だからです。)

編集

もう少し明確にするために、SQLフィドルを作成しました。これはあなたの状況を多かれ少なかれ正しく表していますか?

EDIT2

Kafがコメントしたように、上記のクエリではトランザクションのないアカウントは表示されません。それはあなたが望むものかもしれませんが、そうでない場合は、次のように結合テーブルを切り替えることができます:

SELECT  A.account_no
        ,A.balance
        ,SUM(T.amount) AS TotalAmount
        ,(A.balance + SUM(T.amount)) AS "CORRECT BALANCE"
FROM    account AS A
LEFT OUTER JOIN transactions AS T ON T.account_no = A.account_no
GROUP BY A.account_no, A.balance;
于 2013-02-27T10:11:09.600 に答える
3

group byを使用してテーブルを結合し、合計する方法をお探しですか?

最初のクエリ。

更新:私はあなたAccount table1:と多くの関係を持っていると思うTransaction tableので、あなたはget the sum from transaction tableそれから参加するべきAccountです。理想的には、以下のように必要ですleft join

select a.account_no, 
       a.balance, 
       isnull(x.amount,0) amount, 
       (a.balance + isnull(x.amount,0)) correctAmount
from account a left join (
           select t.account_no, sum(t.amount) amount
           from transactions t
           group by t.account_no ) x
   on a.account_no = x.account_no

SQL-FIDDLE-DEMO(テーブルとデータを提供してくれた@Josienに感謝します)

于 2013-02-27T10:09:24.993 に答える