-1

我有一个由其他视图组成的数据库视图,它有一个用户和他们当前的认证级别。

诀窍是用户可以从旧系统中携带较旧的认证,并且在几个月后到期之前,我必须考虑到这一点。

3级认证分别为“初学者”、“专家”和“大师”

在大多数情况下,用户要么拥有旧系统的认证,要么已获得新系统的某种级别的认证,在这种情况下,我有他们的认证级别,没有问题。然而,有极少数情况会导致用户从遗留系统中获得了“专家”,但在新系统中已经完成了“大师”。在这种情况下,我希望将他们的认证级别设置为“大师”,因为这是两者中较高的。

任何想法如何从视图中实现这一目标?

列是“UserId”、“UserFirstName”、“UserLastName”和“CertificationLevel”

我尝试过 case 语句、临时表和 if 语句,但似乎无法得到我需要的东西。

逻辑很简单:如果一个用户的行数超过 1 行,则取最高级别​​的认证并丢弃另一行。

非常感谢您的任何建议

4

1 回答 1

3

这是一种方法:

您给每个级别一个数字并获得最大数字并从那里再次解码。

select userid, case when max_lvl = 1 then 'beginner'
                    when max_lvl = 2 then 'expert'
                    when max_lvl = 3 then 'master' end as certificationlevel
from
  (select userid, MAX(case when certificationlevel = 'beginner' then 1
                      when certificationlevel = 'expert' then 2
                      when certificationlevel = 'master' then 3 end) as max_lvl
  from test
  group by userid) test;

这符合您的需要吗?

http://www.sqlfiddle.com/#!6/277e6/5

于 2013-02-20T12:12:06.477 回答