2013-10-18 2 views
0

에서 테이블의 결과를 요약 :는 SQL 결과로 아래 표 감안할 때 SQL

Current Result

나는 위의 생성 된 테이블을 사용하고있는 클럽 주어진 정보로 테이블 생성하려면 :

Required Result

저는 여러 개의 areaName과 여러 개의 functionName 및 여러 명의 사용자가 있습니다. 가능하면 어떻게되는지 알려주세요.

나는 몇 가지 시도를했지만 지금은 빠져 나갔고 방향이 필요합니다. 어떤 도움을 주셔서 감사합니다.

의사 코드를 제공 할 수 있다고해도 사용해 볼 수 있습니다. SQL 결과를 주어진 테이블로 시작하십시오.

답변

0

correlated sub-queries을 사용하여 원하는 결과를 얻으십시오. 아래 예제를 제공했습니다. 첫 번째 요약 열에 대해 테스트 한 다음 다른 요약 열에 추가하십시오. 희망적으로 이것은 의미 있고 도움이됩니다. 또는 비슷한 결과를 얻으려면 CTE (common table expression)을 사용할 수 있습니다.

SELECT a.areaName, a.functionName 
     , (SELECT count(DISTINCT b.UserKey) 
      from AREAS b 
      where a.areaName = b.areaName 
      and a.functionName = b.functionName 
      and b.[1-add] = 1) as UsersinAdd 
-- Lather/rinse/repeat for other summary columns 

FROM AREAS a 
group by a.areaName, a.functionName 
0

문제는 테이블의 정규화되지 않은 구조 때문입니다. 열 [1-add],...,[8-correction]은 열이 아닌 열의 값이어야합니다. 이렇게하면보다 복잡한 쿼리가 생성됩니다.

unpivot 명령을 사용하면이 실수를 수정할 수 있습니다.

select areaname, functionname, rights, count(distinct userkey) 
    from 
    (
    select * from yourtable 
     unpivot (permission for rights in ([1-add], [2-update/display],[4-update/display all] , [8-correction])) u 
    ) v 
    group by areaname, functionname, rights