2017-11-09 2 views
0

私はLinQConnect経由でユーザがログインするC#プログラムを取得しました。ユーザがpostgresqlで特定のロールを持っている場合、0,1または2

私は今、0を返すのSQLQueryを必要とする1または2

select rolname 
from pg_user a 
join pg_auth_members b on (a.usesysid=b.member) 
join pg_roles c on (c.oid=b.roleid) 
where 
a.usename='USERNAME' 

ユーザーがロールにある場合は、「RoleA」ユーザーがロールである場合、私は、1を返すようにしたい「RoleB」私は戻りたいです2人の場合は、とにかく2を再試行したいと思います。ユーザーがどちらの役割も果たさない場合は、0を返します。

私はコード内の返されたロールをチェックしてから、特定の番号を取得することはできますが、クエリで0,1または2を返すことはできますか?

EDIT:

私が追加:

max(case when rolname = 'RoleA' then '1' 
    when rolname = 'RoleB' then '2' 
    else '0' 
end) // added max(), now it returns only 2 if im in both Roles 
+0

CASEステートメントは動作するはずです –

+0

サンプルテーブルのデータと予想される結果を追加します。 (フォーマットされていないテキストとして、画像ではありません) – jarlh

+0

@MartinCook、あなたは 'case' _expression_を意味します。 – jarlh

答えて

0

を、私は、これは動作するはずだと思う -

MAX(CASE WHEN rolname = 'RoleA' THEN '1' 
      WHEN rolname = 'RoleB' THEN '2' 
      WHEN COUNT(rolname) = 2 THEN '2' 
      ELSE '0' 
     END) 

私はまだそれを試していないが、私はそれが動作するはずだと思うけど。

関連する問題