CASE WHEN 基于 GROUP BY

问题描述 投票:0回答:1

我正在致力于从遗留系统到新标准系统的迁移。旧系统接受 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。

如何获取这些信息?

桌子是这样的

TABLE

我希望结果(视图)看起来像这样

EXPECTED VIEW

sql group-by case
1个回答
0
投票

我们使用

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

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.