2016-11-27 21 views
1

Я хочу рассчитать одинаковые значения столбцов в SQL Server CE. Проблема в null «s после удаления строк, поскольку идентификаторы не в порядке: 1,2,3,4,5 ... они 1,2,3,5,6 ...SQL Server CE: вычислять одинаковые значения столбцов (проблемы имеют значение null после удаления строк)

Скриншот: 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 

Как вставить этот идентификатор:

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

вместо:

t2.id-1 
+0

Я добавил тег SQL Server на основе изображения. –

+0

@GordonLinoff: но скриншот показывает, что соединение относится к «SQL Server Compact» - используйте тег 'sql-server-ce' вместо' sql-server' –

ответ

0

Вы действительно ищете функцию 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 
+0

Это похоже на элегантное решение, но я использую sql Compact CE 3.5, и я думаю, что LAG введен в sql 2012. – Josip

+0

@Josip, ROW_NUMBER? см. обновленный ответ –

+0

Произошла ошибка при анализе запроса. [Номер линии токена = 1, смещение линии токена = 1, токен с ошибкой = с] – Josip

0

Похоже, вы обеспокоены отсутствием идентификаторов, когда строка удалена. Простой ответ: не беспокойтесь о них.

Определите id как столбец identity и просто позвольте ему присвоить новые номера новым строкам. Не нужно беспокоиться о пробелах в строках. Фактически, их заполнение удаляет одну из очень мощных функций столбцов идентификации - они перечисляют последовательность, в которую строки вставляются в таблицу.