2017-09-27 1 views
0

오라클 SQL을 나열 WHERE 결합 :
나는 DB에서 판매 데이터를 가지고 있고이 연초 판매, 판매 인당 수수료 합계를 끌어하려고 , 그들의 영토를 기반으로합니다. 모든 영업 사원은 CUSTNO가 C001, C002 또는 C003과 동일하지 않을 수 있습니다. 여기에 1 명의 영업 사원이 있습니다.오라클 SQL : 서로 다른 기준에 문을 집계 합계

SELECT sum(commission) AS Sales_Person_1 
FROM salesdata 
WHERE state IN ('TX', 
       'CA', 
       'FL') 
    AND CUSTNO NOT IN ('C001', 
        'C002', 
        'C003') 
    AND date >= 1/1/2017; 
나에게 행이 한 사람을 기반으로 모든 수수료를 제공

,하지만 난 하나의 쿼리를 작성 어떻게 비슷한 지역 기준을 기반으로 다른 모든 영업 사원을 포함하는?

나는

가 이상적으로 내 데이터를 원하는 등, 또한 행으로, 행으로, 'WA'을 'NH'을 'NY을'동일한 데이터를 요약하지만 'GA'를 기반으로 할 로 돌아올 :

Sales_Person_1 $500  
Sales_Person_2 $999 
Sales_Person_3 $888 

나는 GROUP BY을 시도하지만 난 WHERE을 사용할 수 없습니다. 나는 길을 잃었다. 어떤 도움이라도 대단히 감사 할 것입니다.

+0

테이블 구조는 어떻습니까? – alejandrogiron

답변

2

귀하의 질의는 다음과 같이 수 :

SELECT state_group, 
SUM(commission) AS Total_Commission 
FROM (
    SELECT 
    CASE 
    WHEN state IN ('TX', 'CA', 'FL') THEN 'Group 1' 
    WHEN state IN ('GA', 'NY') THEN 'Group 2' 
    WHEN state IN ('NH', 'WA') THEN 'Group 3' 
    ELSE 'Undefined Group' 
    END AS state_group, 
    commission 
    FROM salesdata 
    WHERE CUSTNO NOT IN ('C001', 'C002', 'C003') 
    AND date >= TO_DATE('1/1/2017', 'd/m/yyyy') 
) 
GROUP BY state_group 
ORDER BY state_group; 

서브 쿼리의 CASE 문은 "그룹"또는 "영업 사원"으로 상태 값을 각각 할당 할 수 있습니다. 최종 결과에 다른 값을 표시하려면 "그룹 1"또는 "그룹 2"로 이름을 바꿀 수 있습니다. 그룹이 더 많은 경우 추가 WHEN 행을 추가 할 수도 있습니다.

외부 쿼리는 이러한 그룹에 대한 커미션을 합산하고 각각에 대한 합계를 보여줍니다.

+0

특정 판매원 1 명에게만 적용되지만 내 문제는 다른 지역을 담당하는 약 5 명의 판매원이 있다는 것입니다. 영업 담당자 1은 TX CA와 FL에서 작성한 쿼리와 유사하지만 영업 담당자 2는 GA와 NY에서 근무합니다. Sales Person 3은 NH 및 WA에서 근무합니다. 나는 각각에 대해 하나의 쿼리를 작성할 수 있지만 각각에 대해 합계를 출력 할 수있는 하나의 결합 된 쿼리를 갖기 위해 노력하고 있다는 것을 알고있다. 나는 인덱스에 익숙하지 않지만 아마도 그것을 사용할 수 있을까? – Delbudge

+0

아, 알겠습니다. 쿼리를 업데이트했습니다. 위에 표시된 것처럼 단일 쿼리에서이 작업을 수행 할 수 있습니다. 이 쿼리가 필요한 것을 제공합니까? – bbrumm

+0

이것은 정확히 내가 찾고있는 것입니다. CASE와 WHEN을 사용하는 것이 합리적입니다. 고마워요! – Delbudge