SQL JOIN与CASE语句结果

问题描述 投票:-3回答:2

是否有加入与参考表的情况下,语句的结果,而无需创建一个CTE,ECT的任何方式。

结果之后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语句的结果帮。提前致谢。

sql join case
2个回答
0
投票

在地区的临时值作为case语句的结果,你可以使用select语句从参照表。

所以,如果你的case语句如下:

case  when variable1=value then bonuslevel =A

然后,替换它像这可能帮助

case when variable1=value then (select percentage from ReferenceTable where variable2InReferenceTable=A)

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有“王牌”销售代表相关...先拿到30%,然后看看有什么相匹配的标签。

© www.soinside.com 2019 - 2024. All rights reserved.