我有一个数据库视图,该视图由其他视图组成,其中包含用户及其当前的认证级别。
诀窍在于,用户可以从遗留系统中携带较旧的认证,直到几个月后到期,我必须考虑到这一点。
3级认证是“初学者”,“专家”和“大师”
在大多数情况下,用户要么拥有遗留系统的认证,要么已经从新系统获得了一定程度的认证,在这种情况下,我有他们的认证级别,没有问题。 然而,极少数情况会导致用户从遗留系统中获得说“专家”但在新系统中已完成“主”。 在这种情况下,我希望他们的认证级别设置为“master”,因为这是两者中的较高者。
如何从视图中实现这一点?
列是“UserId”,“UserFirstName”,“UserLastName”和“CertificationLevel”
我已经尝试过case语句,临时表和if语句,但似乎无法得到我需要的东西。
逻辑非常简单:如果用户有超过1行,请使用最高级别的认证并丢弃另一行。
非常感谢您提出任何建议
答案 0 :(得分: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;
这是否符合您的需求?