SQL JOIN与CASE语句结果

时间:2019-02-02 21:30:55

标签: sql join case

有没有办法在不创建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语句的结果与参考表连接起来即可。 预先感谢。

2 个答案:

答案 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%,然后查看匹配的标签那就是