Sql组通过不同的设置在同一个select查询中

时间:2015-02-02 21:56:45

标签: sql-server group-by

我的表格格式如下

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

感谢。

2 个答案:

答案 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首先出现。