SQL - 修改记录以获取一列中季度的总余额,即使是 SQL 中的特定季度

Posted

技术标签:

【中文标题】SQL - 修改记录以获取一列中季度的总余额,即使是 SQL 中的特定季度【英文标题】:SQL - Modify records to get total overall balance of quarters in one column even for specific quarter in SQL 【发布时间】:2020-09-16 17:46:05 【问题描述】:

我正在处理一个查询,我必须有所有季度的总余额。 例如

ID  NAME  Quarter BALANCE
1   RB    202010  500
1   RB    202020  200
2   AD    202020  100
3   KT    202020  800
3   KT    201910  699

我使用 sum(balance) over(partition by ID) TOTAL_BALANCE -

 ID  NAME  Quarter BALANCE TOTAL_BALANCE
 1   RB    202010  500     700
 1   RB    202020  200     700
 2   AD    202020  100     100
 3   KT    202020  800     1499
 3   KT    201910  699     1499

现在我需要一个结果,如果我在 Quarter 上使用过滤器,例如 Quarter = '202020' 它应该给出 -

ID  NAME  Quarter BALANCE TOTAL_BALANCE
1   RB    202020  200     700
2   AD    202020  100     100
3   KT    202020  800     1499

但是由于分区函数需要使用 Group by 'Balance' 我得到 -

  ID  NAME  Quarter BALANCE TOTAL_BALANCE
  1   RB    202020  200     200
  2   AD    202020  100     100
  3   KT    202020  800     800

【问题讨论】:

给定信息。你认为人们可以如何帮助你???请阅读本文以了解如何提问。 ***.com/help/how-to-ask 【参考方案1】:

您可以在子查询中使用窗口函数,然后在外部查询中进行过滤:

select *
from (select t.*, sum(balance) over(partition by id) total_balance from mytable t) t
where quater = '2020'

【讨论】:

【参考方案2】:

你可以试试下面的-

  select ID,NAME,Quarter,BALANCE,
     (select sum(balance) over(partition by ID) from tablename t1 where t.id=t1.id) as total_balance
  from tablename t where quarter = '202020'

【讨论】:

有错误说-单行子查询返回多行

以上是关于SQL - 修改记录以获取一列中季度的总余额,即使是 SQL 中的特定季度的主要内容,如果未能解决你的问题,请参考以下文章

SQL:在一列中获取最小值和最大值

在 SQL 中,我可以在另一列中获取与它们没有关联的特定值的列中的值吗?

SQL:在一个列中查找在另一列中也不唯一的非唯一记录

在 SQL Server 中分组并在一列中连接记录

SQL 语句 - 在一列中获取多个值

sql语句批量修改mysql单表中某一列中的数据