2012-04-26 2 views
-2

다음은 오라클의 결과에 대한 쿼리입니다.하지만 필자는 필요하지 않은 복제본을 얻고 있습니다. 나는 다른 사람들을 찾기가 어렵다고 생각합니다. 한번 시도해보십시오.오라클 선택 쿼리에서 중복 가져 오기

SELECT I.EID       EID, 
     I.WT       Title, 
     I.RID       RID, 
     I.FORMNAME     STAGENAME, 
     I.FORMS      STATUS, 
     I.INPT      Projects, 
     To_char(I.DVDD, 'DD/MM/YYYY') DVDD, 
     CASE 
     WHEN B.SID = 2 
       AND B.DID = 2 THEN Trunc(F.EVENTDATE) - I.DVDD 
     ELSE NULL 
     END       DEVLAPSEDAYS, 
     To_char(I.MDD, 'DD/MM/YYYY') MDD, 
     CASE 
     WHEN B.SID = 2 
       AND B.DID = 2 THEN Trunc(F.EVENTDATE) - I.MDD 
     ELSE NULL 
     END       MONITORLAPSEDAYS, 
     L.LDEID      LEADEID 
FROM table1 I, 
     table2 F, 
     table3 B, 
     table4 L 
WHERE I.ACTIVEFLG = 1 
     AND I.LATESTFLG = 1 
     AND I.FORMSTATUS IN (1, 3) 
     AND I.UNIQUEID = F.UNIQUEID 
     AND B.SID = 2 
     AND B.DID IN (2, 3) 
     AND (F.EVENTDATE > I.DVDD 
       OR F.EVENTDATE > I.MDD) 
     AND ((Trunc(F.EVENTDATE) - I.DVDD) > 2 
       OR (Trunc(F.EVENTDATE) - I.MDD) > 2) 
     AND F.LINKID = B.LINKID 
     AND I.FORMSTAGENAME IN ('Develop', 'Monitor') 

답변

0

내가 이런 종류의 정보와 함께 할 최고의 그룹에 전체 쿼리 당신에게 말할 것입니다 : 당신은 TABLE4 연결되지

GROUP BY I.EID,I.WT,I.RID,I.FORMNAME,I.FORMS,I.INPT, 
    To_char(I.DVDD, 'DD/MM/YYYY') DVDD, 
    CASE 
    WHEN B.SID = 2 
      AND B.DID = 2 THEN Trunc(F.EVENTDATE) - I.DVDD 
    ELSE NULL 
    END, 
    To_char(I.MDD, 'DD/MM/YYYY') MDD, 
    CASE 
    WHEN B.SID = 2 
      AND B.DID = 2 THEN Trunc(F.EVENTDATE) - I.MDD 
    ELSE NULL 
    END, 
    L.LDEID 
+0

중복 행을 일으키는 원인이되는 영업 이익의 SQL에서 카티 상품이 ... 희망이 도움이. – Ollie

+0

그건 맞아, 조인도 안돼 ... – mindandmedia

2

을에서 다른 테이블의에 (L로 별칭) 귀하의 목록은 카티 젼 제품을 생성합니다. 이것은 중복 레코드를 생성 할 가능성이 있습니다.
다른 테이블 중 하나에 TABLE4을 가입하면 잘 가게됩니다. 이것은 또한 기존의 SQL-96을 통해 SQL-92 구문을 사용하는 좋은 이유 http://docs.oracle.com/cd/B14117_01/server.101/b10759/queries006.htm

:에

참조 직교 제품. 테이블 조인을 명시 적으로 지정해야합니다.
SQL-92를 사용하여 쿼리를 다시 작성 했으므로 TABLE4에 대한 조인 조건 만 삽입하면됩니다.

SELECT I.EID       EID, 
     I.WT       Title, 
     I.RID       RID, 
     I.FORMNAME     STAGENAME, 
     I.FORMS      STATUS, 
     I.INPT      Projects, 
     To_char(I.DVDD, 'DD/MM/YYYY') DVDD, 
     (CASE 
      WHEN B.SID = 2 
      AND B.DID = 2 
      THEN Trunc(F.EVENTDATE) - I.DVDD 
      ELSE NULL 
     END)       DEVLAPSEDAYS, 
     To_char(I.MDD, 'DD/MM/YYYY') MDD, 
     (CASE 
     WHEN B.SID = 2 
      AND B.DID = 2 
     THEN Trunc(F.EVENTDATE) - I.MDD 
     ELSE NULL 
     END)       MONITORLAPSEDAYS, 
     L.LDEID      LEADEID 
    FROM table1 I 
INNER JOIN table2 F ON (I.UNIQUEID = F.UNIQUEID) 
INNER JOIN table3 B ON (F.LINKID = B.LINKID) 
INNER JOIN table4 L ON (<insert join clause here>) 
WHERE I.ACTIVEFLG = 1 
    AND I.LATESTFLG = 1 
    AND I.FORMSTATUS IN (1, 3) 
    AND B.SID = 2 
    AND B.DID IN (2, 3) 
    AND (F.EVENTDATE > I.DVDD OR F.EVENTDATE > I.MDD) 
    AND ((Trunc(F.EVENTDATE) - I.DVDD) > 2 OR (Trunc(F.EVENTDATE) - I.MDD) > 2) 
    AND I.FORMSTAGENAME IN ('Develop', 'Monitor') 
+0

: 답장을 보내 주셔서 감사합니다. 그래, 내가 조인 조건을 하나 더 포함하는 것을 잊어 버렸지 만, 지금은 아무 레코드도 얻지 못했습니다. – palak

+0

레코드가 반환되지 않도록 제한 조건을 찾을 때까지 where 절 제한 사항 (조인이 아닌!)을 하나씩 제거하십시오. – Ollie

+0

Ollie : 나는 (TRUNC (F.EVENTDATE) -I.DVDD)> 2 OR (TRUNC (F.EVENTDATE) -I.MDD)> 2) ... 조건을 삭제할 때 그런 식으로 노력했다. 기록이 거의 없어 ... 이것에 대해 생각해 봤어? – palak

관련 문제