如何找到两行之间的累积差异并相应显示?

时间:2017-11-09 05:01:29

标签: tsql sql-server-2012

提前谢谢。

我有一张桌子:

ID | NAME    | Value
---+---------+------------- 
 1 | ABC     | 1987698.987
 2 | DEF     | 1987870.987
 3 | GHI     | 1987990.987
 4 | JKL     | 1988200.987

输出:

ID | NAME  | Value       | Cumulative_difference
---+-------+-------------+----------------------
 1 | ABC   | 1987698.987 |      0  
 2 | DEF   | 1987870.987 |    172
 3 | GHI   | 1987990.987 |    120
 4 | JKL   | 1988200.987 |    210

cumulative_difference的计算是=(1987870.987 - 1987698.987)否则'0'

这是我使用过的查询,但我得到负值:

 select 
     id, name, value, value 
     -LAG(value, 1, 1) over (partition by name order by id)
 from 
     table1

任何帮助都将不胜感激。

我正在使用SQL Server 2012。

谢谢

3 个答案:

答案 0 :(得分:2)

使用LAG (Transact-SQL)

尝试以下脚本
select id,name,value,isnull(value - LAG(value) over(order by id),0) Cumulative_difference
from table1

Out put:

id  name  value         Cumulative_difference
1   ABC   1987698.987   0.00
2   DEF   1987870.987   172.00
3   GHI   1987990.987   120.00
4   JKL   1988200.987   210.00

答案 1 :(得分:1)

正常连接怎么样(如果你有自动增量ids)?

SELECT T.ID,
       T.NAME,
       T.VALUE,
       ISNULL(T.VALUE - T1.VALUE, 0) [Cumulative_difference]
FROM table T
     LEFT JOIN table T1 ON T1.ID + 1 = T.ID;

结果:

ID  NAME    VALUE       Cumulative_difference
1   ABC     1987698.987 0.00
2   DEF     1987870.987 172.00
3   GHI     1987990.987 120.00
4   JKL     1988200.987 210.00

答案 2 :(得分:1)

您可以使用标准ANSI OLAP函数或LAG()以及coalesce,如下所示。

SELECT t1.*
    ,coalesce(value - min(value) OVER (
            ORDER BY id rows BETWEEN 1 preceding
                    AND 1 preceding
            ), 0) AS commulative_diff
FROM table1 t1

OR

SELECT t1.*,
       coalesce(value - lag(value) over(
                                        ORDER BY id),0) AS commulative_diff
FROM table1 t1

<强>结果

ID  NAME    Value        commulative_diff
------------------------------------
1   ABC     1987698,987  0.000
2   DEF     1987870,987  172.000
3   GHI     1987990,987  120.000
4   JKL     1988200,987  210.000

<强> DEMO

相关问题