-1

ユーザーとその現在の認証レベルを持つ、他のビューから構成されるデータベース ビューがあります。

秘訣は、ユーザーがレガシー システムの古い証明書を保持している可能性があり、それが数か月で期限切れになるまで、それを考慮に入れる必要があることです。

認定レベルは「初級」「上級」「上級」の3段階

ほとんどの場合、ユーザーはレガシー システムの認証を取得しているか、新しいシステムで一定レベルの認証を取得しており、その場合、私はその認証レベルを取得しており、問題はありません。ただし、まれに、ユーザーがレガシー システムで「エキスパート」を達成したにもかかわらず、新しいシステムで「マスター」を完了したという結果になる場合があります。このイベントでは、認定レベルを「マスター」に設定したいと考えています。これは 2 つのうち高い方です。

ビューからこれを達成する方法はありますか?

列は「UserId」、「UserFirstName」、「UserLastName」、および「CertificationLevel」です。

case ステートメント、一時テーブル、if ステートメントを試しましたが、必要なものが得られないようです。

ロジックは非常に単純です。ユーザーに複数の行がある場合は、最高レベルの認証を取得し、他の認証を破棄します。

提案をお寄せいただきありがとうございます

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 に答える