SQL 服务器 CE:计算相同的列值(删除行后问题为空值)

SQL Server CE: calculate same column values (problems are null's after deleting rows)

我想在 SQL Server CE 中计算相同的列值。问题是 null 在删除行后因为 id 不按顺序:1,2,3,4,5...它们是 1,2,3,5,6...

截图:http://imgur.com/rHKaPwX

查询

SELECT  
    t2.id, t2.datum,
    t2.stanjekm,
    t2.tocenolit,
    t2.stanjekm - t1.stanjekm as PredjenoKm
FROM
    Gorivo AS t1 
RIGHT JOIN
    Gorivo AS t2 ON t1.id = t2.id-1

如何插入此 ID:

SELECT MAX(id) 
FROM gorivo 
WHERE id NOT IN (SELECT MAX(id) FROM gorivo)

而不是:

t2.id-1

听起来您担心删除行时的 "missing" ID。简单的答案是:不用担心它们。

id 定义为 identity 列,让它为新行分配新数字。无需担心行中的间隙。事实上,填充它们会删除标识列的一个非常强大的功能——它们枚举行插入到 table.

中的顺序

您实际上是在查找 LAG 函数,该函数查看前一行的值。
正如你所看到的,不需要自连接。

LAG (Transact-SQL)

SELECT  id, 
        datum,
        stanjekm,
        tocenolit,
        stanjekm - lag (stanjekm,1,0) over (order by id) as PredjenoKm
FROM Gorivo as 

;with    t as
        (
                SELECT  id, 
                        datum,
                        stanjekm,
                        tocenolit,
                        stanjekm,
                        row_number () over (order by id) as rn

                FROM Gorivo as 
        )

select  t1.id, 
        t1.datum,
        t1.stanjekm,
        t1.tocenolit,
        t1.stanjekm - isnull(t2.stanjekm,0)
from    t as t1 left join t as t2 on t2.rn = t1.rn - 1