首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL: SQL独占或

SQL: SQL独占或
EN

Stack Overflow用户
提问于 2015-12-10 14:51:10
回答 2查看 3K关注 0票数 4

我有一张表格:

代码语言:javascript
复制
username | role
---------+------
name1    | internal
name1    | admin
name2    | internal
name3    | admin
name4    | external

我需要找到所有的用户,他们的角色要么是‘内部的’,要么是‘管理’,但两者都没有(本质上是一个异或)。我如何在SQL中做到这一点?

生成类似于以下形式的查询将是完美的:

代码语言:javascript
复制
username | internal | admin
---------+----------+-------
name2    | 1        | 0
name3    | 0        | 1

如果有帮助的话,我使用的是Oracle数据库

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-10 14:59:08

我会用有条件的聚合来处理这个问题:

代码语言:javascript
复制
select username,
       max(case when role = 'internal' then 1 else 0 end) as internal,
       max(case when role = 'admin' then 1 else 0 end) as admin
from t
where role in ('internal', 'admin')
group by username
having count(*) = 1;

如果名称/角色对可以重复,则使用having count(distinct role) = 1

票数 6
EN

Stack Overflow用户

发布于 2015-12-10 14:58:23

尝尝这个

代码语言:javascript
复制
SELECT UserName, 
CASE WHEN Role = 'internal' Then 1 Else 0 END internal,
CASE WHEN Role = 'admin' Then 1 Else 0 END admin
FROM (
SELECT A.*, COUNT(DISTINCT Role) OVER (PARTITION BY UserName) CNT
FROM Users A
) WHERE CNT = 1

SQL小提琴

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34204932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档