2017-11-21 6 views
0

청구서 목록 보유 ID별로 그룹화 된 모든 고객의 판매량을 알고 싶습니다. 모든 청구서에는 책임자 (테이블 고객 중 한 명인 상점 조 직원)가 있으므로 마지막 청구서를 수령하여 결과에 기록하고 싶습니다.그룹화 된 결과의 최종 값 얻기 - Oracle SQL

결과는 다음과 같아야합니다. 고객 - 청구서의 합계 - 책임자 마지막 청구서의 담당자.

오라클에는 "제한"옵션이 없습니다 (아직 12c가 없습니다). Subselect를 사용해야합니다. 이는 범위를 벗어났기 때문에 고객 ID를 비교할 수 없다는 것을 의미합니다 (아래 코드 참조). 모든 권장 사항을 환영합니다. 이 경우 b.responsible에서

SELECT customer.NAME, SUM(bills.SUME), 
(SELECT responsibleP FROM 
    (SELECT responsibleP FROM bills b WHERE b.responsibleP = customer.id 
    order by asc billDate) 
WHERE ROWNUM = 1) 
FROM customer, bills 
WHERE customer.id = bills.customerid  
GROUP BY customer.id; 

는 고객 테이블에서 customer.id 얻을 수 없습니다.

제목을 자유롭게 바꿔 주시면 기쁘게 생각합니다. 죄송합니다.

답변

1

다른 열의 값이 FIRST 또는 LAST 인 최대 하나의 열을 얻으려면 MAX(column) KEEP (DENSE_RANK [FIRST|LAST] ORDER BY other_columns [ASC|DESC])을 사용할 수 있어야합니다. 이처럼 : 오라클에서

SELECT c.NAME, 
     SUM(b.SUME), 
     MAX(b.respondibleP) KEEP (DENSE_RANK LAST ORDER BY b.billDate) 
     AS lastResponsible 
FROM customer c 
    INNER JOIN bills b 
    ON (c.id = b.customerid) 
GROUP BY c.id; 
0

사용 KEEP LAST :

SELECT 
    c.name, 
    SUM(bills.sume), 
    MAX(b.responsibleP) KEEP (DENSE_RANK LAST ORDER BY b.billDate) 
FROM customer c 
JOIN bills b ON c.id = b.customerid  
GROUP BY c.id;