有没有办法在不创建CTE的情况下将case语句的结果与参考表结合起来。
结果之后 CASE语句:
ID Name Bonus Level (this is the result of a CASE statement)
01 John A
02 Jim B
01 John B
03 Jake C
参考表
A 10%
B 20%
C 30%
我想获取每个员工旁边的%,然后使用MAX函数并按ID分组最大百分比,然后将其重新链接到参考,以便每个员工都具有一个正确的(最高)奖金级别他们的名字旁边。 (这是一个完全虚拟的场景,但与我正在寻找的场景非常相似。)
只需要帮助将CASE语句的结果与参考表连接起来即可。 预先感谢。
答案 0 :(得分:0)
您可以使用引用表中的select语句代替case语句的临时值。
因此,如果您的案例陈述如下:
case when variable1=value then bonuslevel =A
然后,像这样替换它可能会有帮助
case when variable1=value then (select percentage from ReferenceTable where variable2InReferenceTable=A)
答案 1 :(得分:0)
不知道我是否过度简化,但是基于您的案例结果查询的结果,为什么不将其加入引用表,并按ID /名称进行最大分组。由于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与“ Ace”销售代表相关联...请先获取30%,然后查看匹配的标签那就是