如何在不使用循环的情况下在sql中列出每个帐户的信息和总和

如何在不使用循环的情况下在sql中列出每个帐户的信息和总和,sql,sql-server,Sql,Sql Server,大家好,我在回答这个问题时遇到了问题 对于每个账户,列出事件数量、存款总额、取款总额以及存款和取款总额。我对这背后的逻辑有疑问。 我一直在想,这需要一个循环,但我知道这是不正确的。。。有人知道怎么做吗 Database/Table structure: Account (accountNo, ownerNo, balance) Owner (ownerNo, firstName, lastName) Event (id, accountNo, event, amount, eventDate)

大家好,我在回答这个问题时遇到了问题

对于每个账户,列出事件数量、存款总额、取款总额以及存款和取款总额。我对这背后的逻辑有疑问。 我一直在想,这需要一个循环,但我知道这是不正确的。。。有人知道怎么做吗

Database/Table structure: 
Account (accountNo, ownerNo, balance)
Owner (ownerNo, firstName, lastName)
Event (id, accountNo, event, amount, eventDate)
我尝试过的代码:

SELECT COUNT(event) AS 'Account 1 number of events'
FROM Event
WHERE accountNo = 1
然后继续列出账户——但为了可重用性,这并不适用于每个账户,而且效率也不高

试试这个:

select
  account.accountNo,
  count(1) as number_of_events,
  sum(case when event.amount > 0 then event.amount else 0 end) as deposits,
  sum(case when event.amount < 0 then event.amount else 0 end) as withdrawals,
  sum(event.amount) as sum_deposits_withdrawals
from
  account
inner join
  event on
  event.accountNo = account.accountNo
group by
  account.accountNo
选择
account.accountNo,
将(1)计算为事件的数量,
金额(如果event.amount>0,则event.amount否则为0结束)作为存款,
金额(如果event.amount<0,则event.amount否则为0结束)作为取款,
金额(事件金额)作为存款金额和取款金额
从…起
账户
内连接
事件
event.accountNo=account.accountNo
分组
帐号

表的结构和数据的性质是什么?这可以在纯SQL中完成,但是我们不能提供这么少信息的任何帮助。