根据字段值设置用户状态

时间:2013-02-20 12:02:01

标签: sql sql-server tsql

我有一个数据库视图,该视图由其他视图组成,其中包含用户及其当前的认证级别。

诀窍在于,用户可以从遗留系统中携带较旧的认证,直到几个月后到期,我必须考虑到这一点。

3级认证是“初学者”,“专家”和“大师”

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

如何从视图中实现这一点?

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

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

逻辑非常简单:如果用户有超过1行,请使用最高级别的认证并丢弃另一行。

非常感谢您提出任何建议

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;

这是否符合您的需求?

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