2013-05-26 1 views
2

사용자 테이블SQL 내가 다음 예제 테이블 (몇 거기에 조인 있기 때문에 정말 무슨에서 간체) 한

|permission|username| 
| perm1 | u1  | 
| perm2 | u1  | 
| perm3 | u1  | 
| perm1 | u2  | 
| perm4 | u2  | 

내가이 테이블

많은 사용자와 많은 그룹이 조인 왼쪽

일부 사용자가 내 애플리케이션에서 작업을 수행 할 수 있고 다른 사용자는 내 애플리케이션에서 작업을 수행 할 수있는 사용자 권한에 문제가 있습니다. 현재 나는 수동으로 진행해야하고 차이점을 파악해야합니다.

나는 상자에 나에게 사용자에서이

|permission| u1 | u2 | 
|perm1  | 1 | 1 | 
|perm2  | 1 | 0 | 
|perm3  | 1 | 0 | 
|perm4  | 0 | 1 | 
정말 1 원하지 않는

0과 같은 답변을 제공하는 위의 표에서 쿼리를 원하지만 나는 쉽게 그 사용자를 시각화 할 수 있습니다에 뭔가를 원하는 1은 이러한 사용 권한을 가지며 user2는 사용 권한을 갖지 않습니다. 이 기능은 사용자에게 동일한 권한이 있는지 확인하는 데 매우 유용합니다.

권한을 볼 수 있도록 최상위 테이블을 가져 오기 위해 SQL을 수행했습니다.

나는 왼쪽 일종의 조인 자체가 거기에 대한 대답일지도 모른다고 생각했지만, 내가 시도한 모든 것은 잘못된 SQL로 끝나는 것처럼 보인다.

어떤 힌트를 주시겠습니까? 내가 미리

당신이라고 찾고있는 무엇

답변

3

에서

덕분에 "피벗": 시작점을 얻을 경우 행복 임 실험한다. 그것은 오라클과 같은

select permission 
,  count(case when username = 'u1' then 1 end) as User1 
,  count(case when username = 'u2' then 1 end) as User2 
,  count(case when username = 'u3' then 1 end) as User3 
,  ... 
from YourTable 
group by 
     permission 

the PIVOT keyword을 지원하는 작업을 수행하는 한 가지 방법은처럼 group by입니다. 당신은 같은 일을 수행하는 데 사용할 수 있습니다 :

select * 
from YourTable 
pivot (
     count(*) as HasPermission 
     for (username) in ('u1', 'u2', 'u3', ...) 
     ); 

Example for both approaches at SQL Fiddle.

+0

완벽한 - 빠른 응답에 대한 감사합니다! – RNJ