Обновить каждую строку данными из строки выше - PullRequest
1 голос
/ 20 июня 2019

Я хотел бы обновить каждую строку моей таблицы значениями из ряда выше, зависит от некоторых значений.

Допустим, мой стол выглядит так:

  |storeID|   Date   | Stock  | Medition | Regularized |
    --------------------------------
    |   1   |2019-01-01|  500   |   550    |      1      |
    |   1   |2019-01-02|  500   |    0     |      0      |
    |   1   |2019-01-03|  500   |    0     |      0      |
    |   2   |2019-01-01|  250   |   300    |      1      |
    |   2   |2019-01-02|  250   |   350    |      0      |
    |   2   |2019-01-03|  250   |    0     |      0      |

И вывод должен выглядеть так:

|storeID|   Date   | Stock  | Medition | Regularized |
--------------------------------
|   1   |2019-01-01|  500   |   550    |      1      |
|   1   |2019-01-02|  550   |    0     |      0      |
|   1   |2019-01-03|  550   |    0     |      0      |
|   2   |2019-01-01|  250   |   300    |      1      |
|   2   |2019-01-02|  300   |   350    |      0      |
|   2   |2019-01-03|  300   |    0     |      0      |

Когда магазин упорядочен, его запас должен быть равен сумме обеда на следующий день.
Иногда производится приготовление пищи, но запас не должен быть упорядочен. Я попробовал некоторые вещи с рекурсивными таблицами и прочитал несколько постов с похожими проблемами ( Обновление записи с предыдущей строкой ), но все же я не могу решить мою проблему.

** Представь, что у меня есть бак, полный топлива. Каждый день у меня есть продажи и входы, и запас бака меняется. В любой день я могу сделать мейдион, чтобы проверить, соответствует ли реальный запас (medition) запасу, который я написал в «книгах» (stock) Если это не так, и я отмечаю как 1 последний столбец (Regularized), запас на следующий день будет тем же, что я сделал накануне. Если в последнем столбце я поставлю отметку 0, акция будет такой же, как и днем ​​ранее, даже если я выполнил мейдион.

Спасибо за любую помощь, которую вы могли бы оказать мне.

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Вы можете просто использовать CROSS APPLY, чтобы присоединить таблицу к себе.

UPDATE st SET
    stock = u.Medition
FROM SomeTable st
CROSS APPLY( SELECT TOP 1 Medition 
            FROM SomeTable i
            WHERE i.storeID = st.storeID
            AND i.[Date] <= st.[Date]
            AND i.Regularized = 1
            ORDER BY [Date] DESC) u
WHERE st.Regularized = 0;
0 голосов
/ 20 июня 2019

Предполагается, что для каждого хранилища существует только одна упорядоченная строка

UPDATE INPUT_TABLE IT  
SET STOCK = ( SELECT MEDICATION FROM INPUT_TABLE ITI WHERE IT.STOREID = ITI.STOREID AND ITI.Regularized =1 )
WHERE IT.Regularized =0

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...