我遇到的问题就像我正在通过accountID并根据SP选择一个人的金额细节,例如。
AccountID AccountTitle TransactionDate Amount
1 John01 2014/11/28 20
现在,如果同一个帐户ID有第二条或更多条记录,那么它应该添加以前的例如如果accountID 1的第2条记录为40,则金额应显示为60(这样它应该已经添加到20并且在第2条记录中显示总数)
AccountID AccountTitle TransactionDate Amount
1 John01 2014/12/30 60 (in real it was 40 but it should show result after being added to 1st record)
同样适用于进一步的记录
Select Payments.Accounts.AccountID, Payments.Accounts.AccountTitle,
Payments.Transactions.DateTime as TranasactionDateTime,
Payments.Transactions.Amount from Payments.Accounts
Inner Join Payments.Accounts
ON Payments.Accounts.AccountID = Payments.Transactions.Account_ID
Inner Join Payments.Transactions
where Payments.Transactions.Account_ID = 1
浪费了我的时间,无法解决它,所以请帮助我,
答案 0 :(得分:2)
SQL Server 2012+支持累积总和(这似乎是您想要的):
Select a.AccountID, a.AccountTitle, t.DateTime as TranasactionDateTime,
t.Amount,
sum(t.Amount) over (partition by t.Account_Id order by t.DateTime) as RunningAmount
from Payments.Accounts a Inner Join
Payments.Transactions t
on a.AccountID = t.Account_ID
where t.Account_ID = 1;
在早期版本的SQL Server中,您可以使用相关子查询或使用cross apply
轻松完成此操作。
我还修复了你的查询。我不知道你为什么要两次加入Accounts表。此外,表别名使查询更容易编写和读取。
答案 1 :(得分:0)
如果您可以接受所有列的分组,那么这就是答案。
Select AccountID, AccountTitle, TransactionDate, SUM(Payments.Transactions.Amount)
from Payments.Accounts
group by AccountID, AccountTitle, TransactionDate
如果您只想按AccountId分组,则查询为:
Select AccountID, SUM(Payments.Transactions.Amount)
from Payments.Accounts
group by AccountID
在第二个查询中,缺少AccountTitle和TransactionDate,因为它们未在group by子句中使用。要将它们包含在结果中,您必须考虑一个规则来决定使用相同AccountID的多行中的哪一行来获取值AccountTitle和TransactionDate。
答案 2 :(得分:0)
您使用的是什么版本的SQL-Server?这应该可以解决问题:
Select AccountID, AccountTitle, TransactionData,
SUM(Amount) OVER (partiton by AccountID order by TransactionDate) .
from yourtable group by AccountID, AccountTitle, TransactionData
您使用AccountID获取行组,按交易日期对其进行排序,并按交易日期计算该组中的SUM。