Oracle 데이터베이스에 대한 쿼리를 실행 중입니다.외부 조인에서 중복 행 제거
목표는 다음과 같은 열이 반환입니다 -
- 문서 ID를
- 문서 생성 날짜
- 기구 코드
- 문서 상태
- 총액
문제 I 실행하고있는 것은 Organization Co 드. 여러 조직 코드가있는 문서 ID를 가질 수 있습니다. 난 단지 1 개 인스턴스를 원하는 - (있는 경우) 나는
여기내가 현재 가지고있는 것입니다 나머지에 대해 걱정하지 않는다 -
가SELECT * FROM (SELECT DISTINCT (K_HDR.DOC_HDR_ID),
K_HDR.CRTE_DT,
FS_EXT.VAL AS ORG_CODE,
REQ.REQS_STAT_CD,
FS_DOC.FDOC_TOTAL_AMT
FROM PUR_REQS_T REQ,
KREW_DOC_HDR_T K_HDR,
FS_DOC_HEADER_T FS_DOC,
KREW_DOC_HDR_EXT_T FS_EXT
WHERE REQ.FDOC_NBR = K_HDR.DOC_HDR_ID AND
FS_DOC.FDOC_NBR = REQ.FDOC_NBR AND
REQ.FDOC_NBR = FS_EXT.DOC_HDR_ID(+) AND
FS_EXT.KEY_CD(+)= 'organizationCode' AND
(K_HDR.CRTE_DT BETWEEN TO_DATE('2011-10-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND
TO_DATE('2012-09-30 23:59:59', 'YYYY-MM-DD HH24:MI:SS')))
FINAL_SEARCH ORDER BY FINAL_SEARCH.CRTE_DT;
다음 쿼리는 14,933 행을 반환합니다. 올바른 행의 크기는 14,789입니다.
범인은 조직 코드입니다. 나는 내가 보는 결과 세트를 찾고 있어요으로 예를 들어 다음 -
DOC_ID CRTE_DT ORG_CD STAT TOTAL
.
.
.
496256 5-OCT-11 0 CLOS 2779.89
496258 5-OCT-11 8050 CLOS 1737.5
496258 5-OCT-11 8000 CLOS 1737.5
.
.
.
은 어떻게 FS_EXT 표에 살고있는 496,258의 짜증나는 2 예를 제거합니까? 당신 만 MIN
조직 코드를 얻을 수있는 GROUP BY
을 사용하는 SELECT
하나의 전체를 포장 할 수
보관할 레코드의 버전은 무엇입니까? 위의 예에서 레코드를 ORG_CD = 8050 또는 8000으로 유지하려고합니다. 또는 더 일반적으로 - 중복이있을 때 선택 기준을 정의하는 것은 무엇입니까? –
@Rishabh Sagar - 내가 만나는 첫 번째 인스턴스를 가져와 뒤 따르는 인스턴스를 무시해야합니다. –
'처음'은 어떤 기준을 기반으로합니까? 데이터에는 고유 한 순서가 없습니다. 'fs_ext'에 관련성이있는 또 다른 필드가 있습니까? 또한 특히 외부 조인을 사용할 때이 오래된 스타일 대신'join' 구문을 사용하는 것이 좋습니다. –