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...
查询
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 函数,该函数查看前一行的值。
正如你所看到的,不需要自连接。
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
我想在 SQL Server CE 中计算相同的列值。问题是 null
在删除行后因为 id 不按顺序:1,2,3,4,5...它们是 1,2,3,5,6...
查询
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 函数,该函数查看前一行的值。
正如你所看到的,不需要自连接。
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