5

我很难编写一个 SQL 查询,该查询将正确地将 account_no 组合在一起并减去一个金额。

首先,我编写了这个查询,除了 ACCOUNT_NO A-102 应该以 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 求和和分组,但我无法弄清楚如何使用这两个表来执行此操作。这只是我尝试过但无法开始工作的事情。

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 它有两个不同的金额,但来自相同的余额。

4

2 回答 2

7

对于您的查询,要将两行分组为一行,您可以尝试对帐号和余额进行分组:

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 Fiddle。这是否或多或少正确地代表了您的情况?

编辑2

正如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:many的关系,所以,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 回答