SQL Server CE:计算相同的列值(删除行后出现的问题为空)
我想在SQLServerCE中计算相同的列值。问题是删除行后的SQL Server CE:计算相同的列值(删除行后出现的问题为空),sql,sql-server-ce,delete-row,subtraction,Sql,Sql Server Ce,Delete Row,Subtraction,我想在SQLServerCE中计算相同的列值。问题是删除行后的null,因为id的顺序不正确:1,2,3,4,5。。。它们是1,2,3,5,6 截图: 质疑 如何插入此id: SELECT MAX(id) FROM gorivo WHERE id NOT IN (SELECT MAX(id) FROM gorivo) 而不是: t2.id-1 听起来,当删除一行时,您可能会担心“缺少”ID。简单的答案是:不要担心他们 将id定义为identity列,让它为新行分配新的编号。无需担心行中的
null
,因为id的顺序不正确:1,2,3,4,5。。。它们是1,2,3,5,6
截图:
质疑
如何插入此id:
SELECT MAX(id)
FROM gorivo
WHERE id NOT IN (SELECT MAX(id) FROM gorivo)
而不是:
t2.id-1
听起来,当删除一行时,您可能会担心“缺少”ID。简单的答案是:不要担心他们
将
id
定义为identity
列,让它为新行分配新的编号。无需担心行中的间隙。事实上,填充它们会删除标识列的一个非常强大的功能——它们会枚举将行插入表中的顺序。听起来您担心删除行时“缺少”ID。简单的答案是:不要担心他们
将
id
定义为identity
列,让它为新行分配新的编号。无需担心行中的间隙。事实上,填充它们会删除标识列的一个非常强大的功能——它们枚举行插入表中的顺序。您实际上是在寻找LAG函数,该函数查看前一行的值。正如您所看到的,不需要自连接 或
实际上,您正在查找LAG函数,该函数查看前一行的值。
正如您所看到的,不需要自连接 或
我根据图像添加了SQL Server标记。@GordonLinoff:但屏幕截图显示连接到“SQL Server Compact”-使用
SQL Server ce
标记而不是SQL Server
我根据图像添加了SQL Server标记。@GordonLinoff:但屏幕截图显示连接到“SQL Server Compact”-使用sql server ce
标记而不是sql server
这似乎是一个优雅的解决方案,但我使用的是sql Compact ce 3.5,我认为sql 2012中引入了延迟。解析查询时出错。[Token line number=1,Token line offset=1,Token in error=with]1)请在我们转到另一个问题之前批准当前解决方案。2) 你评论中的代码与这篇文章有什么关系?3) 为什么仍然使用RIGHT JOIN?这似乎是一个优雅的解决方案,但我使用的是sql Compact CE 3.5,我认为sql 2012中引入了延迟。解析查询时出错。[Token line number=1,Token line offset=1,Token in error=with]1)请在我们转到另一个问题之前批准当前解决方案。2) 你评论中的代码与这篇文章有什么关系?3) 为什么你还在使用右连接?
t2.id-1
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