我的表格格式如下
reporting_date interest_payment balance
200401 5 10
200401 10 20
200403 25 25
200403 15 10
200406 5 10
200407 20 10
200407 25 5
我想在reporting_date的基础上将不同的列分组,以便我的输出看起来像这样
reporting_date interest_payment balance
200401 15 10
200403 40 25
200406 5 10
200407 45 10
,即interest_payment应按报告日期分组,但在分组余额时,我希望仅按该报告日期的第一行进行分组
因此,对于200401,利息支付将为15,但余额仅为10
select sum(interest_payment),sum(balance)
from table
group by reporting_date
这是我计划使用的查询,但显然它不适用于平衡列。是否有办法在sql server中处理这个问题,以便在单个查询中我可以按特定集合进行分组,但对于另一个我可以分组不同。
感谢。
答案 0 :(得分:0)
with t as (
select
reporting_date,
interest_payment,
first_value(balance) over (partition by reporting_date order by reporting_date) as b
from table
)
select reporting_date, sum(interest_payment), min(b)
from t
group by reporting_date
答案 1 :(得分:0)
您可以使用以下查询:
SELECT reporting_date, balance, (SELECT SUM(interest_payment)
FROM #mytable
WHERE reporting_date = t.reporting_date
GROUP BY reporting_date) AS sum_of_interest
FROM (
SELECT reporting_date, balance,
ROW_NUMBER() OVER (PARTITION BY reporting_date ORDER BY id) AS rn
FROM #mytable ) t
WHERE t.rn = 1
我假设id
字段定义balance
的优先顺序,即具有最低相关balance
值的id
首先出现。