使用另一个表检查后,在表中添加行

时间:2015-03-16 11:48:42

标签: sql sql-server ssis ssis-2012

我在这张表“Mileage”中有以下数据

user   DateMil        Dist
 10   2014-09-04      102
 10   2014-09-07      250
 15   2014-09-04      180
 15   2014-09-06      135

和另一个表“初始化”,包含以下数据

user   DateInit         Init
 10   2014-09-03      12500
 15   2014-09-03      20000

我需要的是获取表“Initialization”的最后一个数据,并将其与“Mileage”表连接到同一个用户,并在“Initialization”表中添加一个新行。结果表应如下所示

user   DateInit         Init
 10   2014-09-03      12500
 10   2014-09-04      12602(12500+102=last(init)+Dist)
 10   2014-09-07      12852(12602+250)
 15   2014-09-03      20000
 15   2014-09-04      20180(2000+180)
 15   2014-09-06      20315(20180+135)

1 个答案:

答案 0 :(得分:2)

您可以使用CTE将两张原始表中的UNION放在一起。然后, 如果您使用的是SQL SERVER 2012+,则可以使用SUM计算运行总计:

 ;WITH CTE AS (
    SELECT [user], DateMil AS DateInit, Dist AS Init
    FROM Mileage

    UNION

    SELECT [user], DateInit, Init 
    FROM Initialization
)
SELECT [user],  DateInit, 
       SUM(Init) OVER (PARTITION BY [user] ORDER BY DateInit) As Init
FROM CTE

SQL Fiddle Demo here