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
排在第一位。
我有以下格式的 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
排在第一位。