我正在致力于从遗留系统到新标准系统的迁移。旧系统接受 0 作为数量和正数,而新系统需要负数或正数。
为了实现这一点,我尝试将 0 数量的行与有数量的行分组。
例如:
Select
Refnr
,CASE WHEN QTY=0 AND Code='000' THEN '112'
ELSE CODE END AS CODE
,Qty
,Amount
FROM TABLE
但是,我的问题是有时代码应该更改为其他内容,并且基于同一 refnr 中的其他数据。因此,如果同一个 refnr 同时具有代码 000 和 345,则应将 000 更改为 345,而在第一种情况下,应将其更改为 112。
如何获取这些信息?
桌子是这样的
我希望结果(视图)看起来像这样
我们使用
lead()
将 code
从 0
更改为它后面的那个,然后我们可以使用 group by()
得到想要的结果。
select refrn
,code
,sum(qty) as qty
,sum(amount) as amount
from (
select refrn
,case code when 0 then lead(code) over(partition by refrn order by code) else code end as code
,qty
,amount
from t
) t
group by refrn, code
order by refrn