22,298
社区成员
发帖
与我相关
我的任务
分享
刚想到一点就给你抢了,好过分
--F1 F2 F3
--------------------------
with tb as
(
select 1 as F1,'A' as F2,-10 as F3 union all
select 2,'A',5 union all
select 3,'A',20 union all
select 4,'A',32 union all
select 1,'B',5 union all
select 2,'B',20 union all
select 1,'C',8
),
tb2 as
(
----------------------------------------增加一列用于区别是否大于0
select *,
case when F3>0 then 0 else 1 end as v_case
from tb
),
tb3 as
(
----------------------------------------针对于大于0的 找到一条单据
select *,
ROW_NUMBER() over(partition by F2,v_case order by F3) as v_row
from tb2
)
select
----------------------------------------找到小于0 及 (大于0的一条数据)
F1,
F2,
case when v_row=1 then F3 else 0 end as F3
from tb3
order by F2,F1
/*
F1 F2 F3
----------- ---- -----------
1 A -10
2 A 5
3 A 0
4 A 0
1 B 5
2 B 0
1 C 8
(7 row(s) affected)
*/