2016-11-30 5 views
0

나는 EMP 테이블을 가지고 있습니다. 각 부서의 직원 수를 국가 이름 = '인도', '미국', '오스트레일리아'별로 그룹화해야합니다. 예를 들어 오라클에서 파티션을 얻기 위해 파티션을 사용하십시오

,

DEPARTMENT | #EMPLOYEE(INDIA) | #EMPLOYEE(USA) | # EMPLOYEE(AUSTRALIA)  
ACCOUNTING | 5    |2    | 3 
IT   | 5    |2    | 1 
BUSINESS  | 1    |4    | 3 

나는 그것을 할 파티션 BY를 사용해야합니다. PARTITION을 사용하여 각 부서의 총 직원 수를 구할 수 있습니다. 그러나 나는 국가 이름별로 소그룹으로 갈 수 없다.

제게 제안 해주세요.

감사합니다.

+0

현재 테이블 또는 원하는 출력의 예는 무엇입니까? 우리는 둘 다 필요합니다. [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t 그리고 [** 시작 **] (http : //spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) 질문 품질을 향상시키고 더 나은 답변을 얻는 방법을 배우십시오. –

+0

원하는 출력입니다. 고맙습니다. 현재 테이블에는 직원 ID, 이름, 국가, 부서, 급여가 있습니다. – Roshni

+0

아니요, "파티션 바이 바이"를 사용할 필요가 없습니다. 당신이 필요로하는 것은 당신의 요구 사항에서 결과를 얻는 것입니다; 그렇게하는 것은 필요하지 않습니다. 게다가,이 경우에는 "파티션 바이다"는 어쨌든 도움이되지 않습니다. 당신이 필요로하는 것은'PIVOT'입니다 - 당신이 모든 국가의 수와 이름 (그리고 원하는 순서)을 미리 알지 못한다면 "보통의"SQL에서는 이것을 할 수 없을 것입니다. * 동적 ** SQL. – mathguy

답변

0

조건부 개수를 고려하십시오.

SELECT DEPARTMENT, 
     COUNT(CASE WHEN Country = 'INDIA' THEN 1 END) as emp_india, 
     COUNT(CASE WHEN Country = 'USA' THEN 1 END) as emp_usa, 
     COUNT(CASE WHEN Country = 'AUSTRALIA' THEN 1 END) as emp_australia 
GROUP BY DEPARTMENT 
+0

이 방법은 국가의 수, 이름 및 순서가 미리 주어진 경우에만 작동합니다. 그렇지 않으면 동적 SQL을 피할 수 없습니다. (처음에 비정규 화 된 출력을 피하기로 선택하거나 SQL보다는이 작업을위한보고 도구를 사용하는 것이 좋을 때까지) – mathguy

+0

@mathguy 동의하지만 각국은 여기에 있습니다. 왜 국가 별 명령이 여기에 할 일이 있는거야? –

+0

알려진 국가 (또는 관련 부서)에 대해 확신하지 못합니다. 어쩌면 OP가 아닐지도 모릅니다. 아니면 OP가 대표적인 데이터 세트만을 보여줬을 수도 있습니다. Order : 열이 나타나는 순서입니다. 아마도 알파벳순이나 총 직원 수 또는 다른 규칙이나 규칙 집합으로 알고있는 사람과 같은 * 일부 주문으로 표시되어야합니다. 기업들은 이상한 요구 사항을 가지고 있습니다 ... – mathguy