我有一张表格:
username | role
---------+------
name1 | internal
name1 | admin
name2 | internal
name3 | admin
name4 | external我需要找到所有的用户,他们的角色要么是‘内部的’,要么是‘管理’,但两者都没有(本质上是一个异或)。我如何在SQL中做到这一点?
生成类似于以下形式的查询将是完美的:
username | internal | admin
---------+----------+-------
name2 | 1 | 0
name3 | 0 | 1如果有帮助的话,我使用的是Oracle数据库
发布于 2015-12-10 14:59:08
我会用有条件的聚合来处理这个问题:
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。
发布于 2015-12-10 14:58:23
尝尝这个
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 = 1SQL小提琴
https://stackoverflow.com/questions/34204932
复制相似问题