Sql 按同一 select 查询中的不同集合分组

Sql group by different set in same select query

我有以下格式的 table

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 服务器中处理此问题,以便在单个查询中我可以按特定集合分组但对于另一个我可以按不同的组分组。

谢谢。

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

您可以使用以下查询:

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 的优先级,即具有最低相关 id 值的 balance 排在第一位。