我有一組資料,我需要根據一個特定列中的記錄手動調整特定行后面的行的列(插入 0)。例如:
我想要的輸出:
| 型別 | 物件 ID | 日期 | AMT1 | AMT2 | AMT3 | 總 AMT |
|---|---|---|---|---|---|---|
| C | 1234 | 3/1 | 2 | 2 | 2 | 4 |
| 一種 | 1234 | 3/2 | 5 | 0 | 0 | 3 |
| 乙 | 1234 | 3/3 | 2 | 3 | 0 | 0 |
查看 TYPE 列,僅當當前行的型別為“A”時,我希望將其下方AMT2 列中的任何內容填充到該行的 TOTAL AMT 列中。否則,我希望 TOTAL AMT 列是 AMT1 和 AMT3 的總和。然后最重要的是,我需要 TOTAL AMT 列將 0 硬編碼到型別“A”下面的行中(而不是對 AMT1 和 AMT3 求和)。
我使用 LEAD() 函式來處理問題的前半部分(從 AMT2 中檢索 TOTAL AMT 列的值),但我正在努力解決如何在另一個 CASE WHEN 中獲取它(如果這甚至是正確的方法) 這將允許我為所需的特定行硬編碼 0。任何幫助是極大的贊賞!
這是我用于從下一行檢索 AMT2 的代碼:
CASE WHEN TYPE = 'A' THEN LEAD(AMT2, 1) OVER (PARTITION BY ObjectID ORDER BY DATE ASC)
ELSE (AMT1 AMT3)
END AS TOTAL AMT
uj5u.com熱心網友回復:
看來您只需要一個嵌套的 case 運算式:
case when
type = 'A' then
lead(AMT2) over (partition by ObjectID order by DATE)
else
case when lag(type) over (partition by ObjectID order by DATE)='A' then
0
else
AMT1 AMT3
end
end as TOTALAMT;
演示小提琴
uj5u.com熱心網友回復:
你可以通過使用鉛和案例來做到這一點(結果在這里)
select *,case type when 'A' then lead(amt2,1) over (partition by objectid order by date) else amt1 amt3 end as total
from t1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/446834.html
