db2 sql обновление для расчета общего столбца - PullRequest
0 голосов
/ 01 апреля 2020

, пытаясь вычислить скользящую сумму для годового сегмента столбца, ежемесячные периоды также меняются, поэтому я не уверен, если это возможно в одном обновлении, я хочу, чтобы столбец prev12 равнялся обновленному месячному 1-12 после перемещения

update table_a as a1
set (a1.col1, a1.col2, a1.col3,a1.col4,a1.col5,a1.col6,
    a1.col7, a1.col8,a1.col9, a1.col10,a1.col11,a1.col12, 
    a1.col_prev12) = 
  (select    
    a2.col, a2.col1, a2.col2, a2.col3,
    a2.col4, a2.col5, a2.col6,
    a2.col7, a2.col8, a2.col9,
    a2.col10, a2.col11, 
    a2.col1 + a2.col2 + a2.col3 + a2.col4 + 
    a2.col5 + a2.col6 + a2.col7 + a2.col8 + 
    a2.col9 + a2.col10 + a2.col11 + a2.col12                                          
    from table_a as a2
    where a1.store = a2.store and a1.line = a2.line and a1.item = a2.item
   )
  where a1.last_roll_date = current date

1 Ответ

1 голос
/ 03 апреля 2020

Не совсем уверен, что вы хотите, но да, вы можете обновить несколько столбцов в UPDATE

Кроме того, вы можете найти эту форму UPDATE проще

UPDATE (
    SELECT *
    ,   LAG(COL1) OVER(PARTITION BY store, line ORDER BY last_roll_date) as PREV_COL1
    ,   LAG(COL1) OVER(PARTITION BY store, line ORDER BY last_roll_date) as PREV_COL2
    FROM
        table_a
)
SET COL1 = PREV_COL1
,   COL2 = PREV_COL2
WHERE
    last_roll_date = current date

или если нет, вы вероятно, просто where a1.last_roll_date = a2.last_role_date - 1 month в исходном суб-выборе

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