Не знаю, слишком ли я упрощаю, но, основываясь на результатах вашего запроса о результатах, почему бы просто не присоединить это к справочной таблице и сделать максимум, сгруппированный по ID / имени.Поскольку идентификатор и имя человека не изменятся, так как это один и тот же человек, вы просто получаете максимум, который хотите.Чтобы завершить Бонусный уровень, воссоединитесь только с той частью после максимального процента, определенного для человека.
select
lvl1.ID,
lvl1.Name,
lvl1.FinalBonus,
rt2.BonusLvl
from
( select
PQ.ID,
PQ.Name,
max( rt.PcntBonus ) as FinalBonus
from
(however you
got your
data query ) PQ
JOIN RefTbl rt
on PQ.BonusLvl = rt.BonusLvl
) lvl1
JOIN RefTbl rt2
on lvl1.FinalBonus = rt2.PcntBonus
Поскольку Бонусные уровни (A, B, C) не гарантируют соответствующие% уровни (10,20,30), я сделал это таким образом ... Иначе, вы могли бы просто использовать max () как для уровня бонуса, так и для процента.Но что, если ваши бонусные уровни были указаны как что-то вроде
Limited 10%
Aggressive 20%
Ace 30%
Вы могли видеть, что у максимума уровня выше было бы «Ограничено», но максимальный% = 30 связан с продажами «туза»rep ... Сначала получите 30%, а затем посмотрите, что это за метка.