select titINsme as 제품명, tbase.pcount as 생산량
rank() over(order by tbase.pcount desc nulls last ) as 생산량_순위
from titem tit
left outer join
(
select tpr.inumber, sum(tpr.PCount) PCount
from tProduction tpr
where TO_CHAR(tpr.PDate,'YYYYMM')='202001'
GROUP BY tpr.INumber
) tBASE
ON tit.INUmber = tBase.Inumber
이렇게 서브쿼리 형식이면 left outer join 대신 + 를 사용할 수 없나요 ?
+기호를 사용할 수있는 방법이 있을까요 ?
쿼리 수정하셨네요.
- FROM 절 AS 빼셨고
- YYYMM 을 YYYYMM 으로 수정하셨네요.
- RANK 앞에 컴마(,) 만 추가해 주시면 오라클에서도 정상 동작 할 것입니다.
- titINsme 는 tit.IName 의 오타가 아닐까? 생각됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | -- ANSI -- SELECT titINsme AS 제품명 , tbase.pcount AS 생산량 , RANK() OVER( ORDER BY tbase.pcount DESC NULLS LAST ) AS 생산량_순위 FROM titem tit LEFT OUTER JOIN ( SELECT tpr.inumber , SUM (tpr.PCount) PCount FROM tProduction tpr WHERE TO_CHAR(tpr.PDate, 'yyyymm' ) = '202001' GROUP BY tpr.INumber ) tBASE ON tit.INUmber = tBase.Inumber ; -- Oracle -- SELECT titINsme AS 제품명 , tbase.pcount AS 생산량 , RANK() OVER( ORDER BY tbase.pcount DESC NULLS LAST ) AS 생산량_순위 FROM titem tit , ( SELECT tpr.inumber , SUM (tpr.PCount) PCount FROM tProduction tpr WHERE TO_CHAR(tpr.PDate, 'yyyymm' ) = '202001' GROUP BY tpr.INumber ) tBASE WHERE tit.INUmber = tBase.Inumber(+) ; |