如果用户在postgresql中具有特定角色,则返回值0,1或2

时间:2017-11-09 08:49:46

标签: sql postgresql

我有一个C#程序,用户通过LinQConnect登录。

我现在需要一个返回0,1或2的SQLQuery。

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"如果用户处于角色" RoleB"我想返回1我想要返回2,如果他在两者中,我想反正2,如果用户不在任何角色中,我想返回0.

我知道我可以检查代码中的返回角色然后返回特定的数字,但是我可以通过查询返回0,1或2吗?

修改

我补充说:

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

1 个答案:

答案 0 :(得分:0)

我认为这应该有效 -

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

虽然我还没有尝试过,但我认为它应该有用。