如何在sql中使用某些条件求和?

时间:2016-05-24 14:29:10

标签: sql sql-server date

我有一个像这样的用户表

  ID     Date        Value
  ---------------------------
  1001   31 01 14    2035.1
  1002   31 01 14    1384.65
  1003   31 01 14    1011.1
  1004   31 01 14    1187.04
  1001   28 02 14    2035.1
  1002   28 02 14    1384.65
  1003   28 02 14    1011.1
  1004   28 02 14    1188.86
  1001   31 03 14    2035.1
  1002   31 03 14    1384.65
  1003   31 03 14    1011.1
  1004   31 03 14    1188.86
  1001   30 04 14    2066.41
  1002   30 04 14    1405.95
  1003   30 04 14    1026.66
  1004   30 04 14    1207.15

我想像这样从这张表中得到一笔钱

  ID     Date        Value       Total
  ---------------------------------------
  1001   31 01 14    2035.1     2035.1
  1002   31 01 14    1384.65    1384.65
  1003   31 01 14    1011.1     1011.1
  1004   31 01 14    1187.04    1187.04
  1001   28 02 14    2035.1     4070.2
  1002   28 02 14    1384.65    2769.3
  1003   28 02 14    1011.1     2022.2
  1004   28 02 14    1188.86    2375.9
  1001   31 03 14    2035.1     6105.3
  1002   31 03 14    1384.65    4153.95
  1003   31 03 14    1011.1     3033.3
  1004   31 03 14    1188.86    3564.76
  1001   30 04 14    2066.41    8171.71
  1002   30 04 14    1405.95    5180.61
  1003   30 04 14    1026.66    4059.96
  1004   30 04 14    1207.15    4771.91

我有id,对于第一个月的每个id,它应该写为total的值,对于该id的第二个月,它应该添加第一个月+第二个月的值,它应该继续这样。如何在SQL中进行此求和?

任何人都可以挽救我的一天吗?

2 个答案:

答案 0 :(得分:0)

试试这个

SELECT
ID,
[Date],
Value,
Total = Value + COALESCE(
(
    SELECT SUM(Value)
        FROM TableName AS s
        WHERE s.[Date] < o.[Date] AND s.Id=o.Id), 0
)
FROM TableName AS o
ORDER BY [Date];

答案 1 :(得分:0)

尝试这个。

SELECT ID, Date, Value, SUM(Value) OVER(PARTITION BY ID ORDER BY ID, Date) AS 'Total'
       FROM [TableName]