2012-09-24 2 views
1

나는이 선택의 결과를 하나의 견해로보고 싶습니다. 공통 컬럼은 RUNID이지만, 오른쪽 테이블의 결과는 항상 존재하지는 않습니다. 그래서 그것은 비어 있어야합니다. 나는이 모든 선택이 하나의 선택으로 합쳐질 수 있다고 생각하며, RUNID를 다른 기준에 따라 각각의 수에 전달합니다.여러 개의 oracle select sql을 하나의 뷰에 결합하는 방법은 무엇입니까?

--COUNT OF S16 ELIGIBLE ACCOUNTS 
SELECT PDDETAIL.RUNID, COUNT(*) AS "S16 ELIGIBLE ACCOUNTS" 
FROM  PDDETAIL 
LEFT JOIN PDSTAGES ON (PDDETAIL.PDID = PDSTAGES.PDID AND PDDETAIL.CUST_ID = PDSTAGES.CUST_ID) 
WHERE  PDSTAGES.PDSTAGE = 'S16ELIGIBLE' 
GROUP BY PDDETAIL.RUNID 
ORDER BY PDDETAIL.RUNID ASC 
; 

--COUNT OF S16 MTO SUBMITTED 
SELECT PDDETAIL.RUNID,COUNT(*) AS "S16 MTO SUBMITTED" 
FROM  PDDETAIL 
LEFT JOIN PDSTAGES ON (PDDETAIL.PDID = PDSTAGES.PDID AND PDDETAIL.CUST_ID = PDSTAGES.CUST_ID) 
WHERE  PDSTAGES.PDSTAGE = 'S16MTOREFRESHSUBMITTED' 
GROUP BY PDDETAIL.RUNID 
ORDER BY PDDETAIL.RUNID ASC 
; 

--COUNT OF S16 MTO RETURN FAILED 
SELECT PDDETAIL.RUNID,COUNT(*) AS "S16 MTO FAILED" 
FROM  PDDETAIL 
LEFT JOIN PDSTAGES ON (PDDETAIL.PDID = PDSTAGES.PDID AND PDDETAIL.CUST_ID = PDSTAGES.CUST_ID) 
WHERE  PDSTAGES.PDSTAGE = 'S16MTORETURNFAILED' 
GROUP BY PDDETAIL.RUNID 
ORDER BY PDDETAIL.RUNID ASC 
; 

답변

3
SELECT  
PDDETAIL.RUNID, 
COUNT(CASE WHEN PDSTAGES.PDSTAGE = 'S16ELIGIBLE' THEN 1 END) AS "S16 ELIGIBLE ACCOUNTS", 
COUNT(CASE WHEN PDSTAGES.PDSTAGE = 'S16MTOREFRESHSUBMITTED' THEN 1 END) AS "S16 MTO SUBMITTED", 
COUNT(CASE WHEN PDSTAGES.PDSTAGE = 'S16MTORETURNFAILED' THEN 1 END) AS "S16 MTO FAILED" 
FROM  PDDETAIL 
LEFT JOIN PDSTAGES ON (PDDETAIL.PDID = PDSTAGES.PDID AND PDDETAIL.CUST_ID = PDSTAGES.CUST_ID) 
GROUP BY PDDETAIL.RUNID 
ORDER BY PDDETAIL.RUNID ASC; 
관련 문제