SQL Server 2008 R2
Есть таблица ниже:
Device | DateOfSample| Value
=================================
Pump 1 Starts| 2020-07-07| 0
Pump 1 Starts| 2020-07-08| 32
Pump 1 Starts| 2020-07-09| 30
Pump 1 Starts| 2020-07-10| 5
Pump 1 Starts| 2020-07-11| 29
Pump 1 Starts| 2020-07-12| 0
Pump 1 Starts| 2020-07-13| 57
Pump 1 Starts| 2020-07-14| 50
Pump 1 Starts| 2020-07-15| 0
Pump 1 Starts| 2020-07-16| 52
Мне нужно обновить таблицу значений, чтобы иметь значение предыдущих дней, если оно равно 0, чтобы оно выглядело вот так:
Device | DateOfSample| Value
=================================
Pump 1 Starts| 2020-07-07| 0
Pump 1 Starts| 2020-07-08| 32
Pump 1 Starts| 2020-07-09| 30
Pump 1 Starts| 2020-07-10| 5
Pump 1 Starts| 2020-07-11| 29
Pump 1 Starts| 2020-07-12| 29
Pump 1 Starts| 2020-07-13| 57
Pump 1 Starts| 2020-07-14| 50
Pump 1 Starts| 2020-07-15| 50
Pump 1 Starts| 2020-07-16| 52
Я не хочу, чтобы первое значение в таблице менялось, если оно равно 0, но любые другие значения 0 должны быть записаны так же, как и накануне.
Я пытался использовать Update Case, но, похоже, ничего не добился.
UPDATE #MaxValues
SET Value = CASE
WHEN m.Value = 0 THEN (
SELECT m1.Value
FROM #MaxValues m1
WHERE m1.DateOfSample = DateAdd (Day, -1, (SELECT m2.DateOfSample FROM #MaxValues m2 WHERE Value = 0)))
ELSE m.Value
END
FROM #MaxValues AS m
Все, что я получаю, это ошибка:
Msg 512, уровень 16, состояние 1, процедура sp_PumpStartAvg, строка 156 Подзапрос вернул более одного значения. Это недопустимо, если подзапрос следует за =,! =, <, <=,>,> = Или когда подзапрос используется как выражение.
Я понимаю, почему я получаю сообщение об ошибке , потому что в таблице есть несколько мест с 0, и я пытаюсь вернуть их все в операторе выбора даты. Я просто не знаю, как это обойти.
Любой совет приветствуется.