У меня есть таблица с этими столбцамиавтообъединения Обновления строк таблицы
- ProjectId
- Generation
- Expected
- CarryOver
Я пытаюсь обновить уже заселенную таблицу таким образом:
Generation = Integral Part of ((Generation + CarryOver of Previous Row)/10)
CarryOver = decimal part of ((Generation + CarryOver of Previous Row)/10)
где Предыдущая строка и текущие Роу оба имеют такой же ProjectID
Ниже запрос я использую для достижения этого:
UPDATE TTable
SET
TTable.Expected=(TTable.Generation+ ISNULL(STable.CarryOver,0)),
TTable.CarryOver =(TTable.Generation+ISNULL(STable.CarryOver,0))-CONVERT(INT,(TTable.Generation+ISNULL(STable.CarryOver,0)))
FROM
(
SELECT ROW_NUMBER()OVER(order by ProjectId,MonthYear) as RowNumber,ProjectId,
[MonthYear],[Month],[Generation],[Expected],[CarryOver]
FROM #SRECEsimated
)TTable,
(
SELECT ROW_NUMBER()OVER(order by ProjectId,MonthYear) as RowNumber,ProjectId,
[MonthYear],[Month],[Generation],[Expected],[CarryOver]
FROM #SRECEsimated
) STable
Where
TTable.RowNumber = STable.RowNumber+1 AND
TTable.ProjectId = STable.ProjectId
.... но что-то странное происходит, обновление происходит только для первых двух строк. Для других строк ISNULL(STable.CarryOver,0)
возвращает 0. why ?? Пожалуйста, помогите мне. или предложить другой способ для достижения этой
EDIT: на выполнение запроса генерируется
ProjectId MonthYear Month Year Generation Expected CarryOver
10 2011-10-01 00:00:00.000 10 2011 56.748 56 0.748
10 2011-11-01 00:00:00.000 11 2011 12.004 12 0.752
10 2011-12-01 00:00:00.000 12 2011 10.632 10 0.632
10 2012-01-01 00:00:00.000 01 2012 11.928 11 0.928
10 2012-02-01 00:00:00.000 02 2012 7.580 7 0.580
100 2011-12-01 00:00:00.000 12 2011 5.897 5 0.897
100 2012-01-01 00:00:00.000 01 2012 0.881 1 0.778
данных, как показано выше. обратите внимание на то, как логика не работает после 3row
Оригинальный вырез. Перед выполнением запроса на обновление:
ProjectId MonthYear Month Year Generation Expected CarryOver
10 2011-10-01 00:00:00.000 10 2011 56.748 56 0.748
10 2011-11-01 00:00:00.000 11 2011 12.004 NULL NULL
10 2011-12-01 00:00:00.000 12 2011 10.632 NULL NULL
10 2012-01-01 00:00:00.000 01 2012 11.928 NULL NULL
10 2012-02-01 00:00:00.000 02 2012 7.580 NULL NULL
100 2011-12-01 00:00:00.000 12 2011 5.897 5 0.897
100 2012-01-01 00:00:00.000 01 2012 0.881 NULL NULL
Что такое #SRECEstimated? – Hogan
загляните в него –
Рабочее решение опубликовано. – Hogan