不确定如何执行此操作,但是我想添加一个新列“ Jersey”,该列将根据tab_A和tab_B中的“运动”值递增1。因此,如果tab_B中已经存在“运动”,则只需抓住最大jersey_no并为新列添加1。那很容易。
现在,如果tab_B中不存在“运动”,则将新列的“运动”值设为100。但是,如果tab_A中有多个相同的“运动”(但tab_B中不存在),则它应从100开始并为下一个相同运动增加1,依此类推(例如,参见下面的Garcia示例) )。
我创建了一个序列“ sequnce”,但是那根本没有帮助。还有另一种方法可以做到这一点吗?预先感谢!
Tab_A
Name State Sport
Garcia CA Basketball
Garcia AL Basketball
Garcia NY Basketball
McGee CA Swimming
Tontou CA Football
Tontou AL Swimming
Tab_B
Name Sport Jersey_No
Garcia Swimming 100
Garcia Football 100
McGee Swimming 101
Tontou Swimming 101
Tontou Swimming 102
预期产量
Name State Sport Jersey
Garcia CA Basketball 100
Garcia AL Basketball 101
Garcia NY Basketball 102
McGee CA Swimming 102
Tontou CA Football 100
Tontou AL Swimming 103
我的代码
select name,state,sport,nvl ((select max(b.jersey_no + 1) from tab_b b
where b.sport = a.sport
and b.name = a.name),(case
when not exists (select 1 from tab_b b
where b.sport = a.sport
and b.name = a.name
having count(a.sport) > 1)
then seqnce.nextval
else '100'
end )
) Jersey
from tab_a