如何汇总每一行中特定名称的值?

时间:2019-09-01 19:30:08

标签: sql sql-server-2012 sum conditional-statements

我是SQL的新手,无法解决以下问题:我有一列名称[name]),一列我想总结的整数值([Values])和一列整数值([天])。我想总结每天按名称分组的值。因此,例如,如果在第1天有一个名称为“ Chris”的值4,在第3天还有另一个条目“ Chris”的值2,我想显示第_1天(4)和第_2天(4)的Chris总和+ 2 = 6)。

就像上面的示例(“ chris”)一样,我想对它们进行汇总,显示每天每个名称的总和(从第1天到第x天的总和)。

我每天只能汇总每个名称的值(请参见下面的代码),但这不是我要搜索的内容,因为我需要保留数据库的结构。因此,我需要在另一列中显示每一行中每个值的总和。

replace

下面有一张表格显示我想要实现的目标。

table

1 个答案:

答案 0 :(得分:0)

具有sum()窗口功能:

select *,
  sum(value) over (partition by name order by day) SumValue,
  sum(value2) over (partition by name2 order by day) SumValue2
from tablename 
order by day 

或:

select name, day, value, name2, value2,
  sum(value) over (partition by name order by day) SumValue,
  sum(value2) over (partition by name2 order by day) SumValue2
from (select *, row_number() over (order by day) rn from tablename) as t
order by rn

如果要保留行的原始顺序。
请参见demo
结果:

> name  | day | value | name2 | value2 | SumValue | SumValue2
> :---- | --: | ----: | :---- | -----: | -------: | --------:
> Chris |   1 |     2 | Paul  |      5 |        2 |         5
> Alice |   1 |     5 | Ken   |      4 |        5 |         4
> Paul  |   2 |     8 | Alice |      1 |        8 |         1
> Ken   |   2 |     4 | Chris |      2 |        4 |         2
> Alice |   3 |     3 | Ken   |      3 |        8 |         7
> Chris |   3 |     6 | Paul  |      0 |        8 |         5