2015-01-19 2 views
0

이 쿼리를 실행하면 중복 행이 생깁니다. 특히 order_ID는 해당 Customer_ID와 관련된 가능한 모든 ship_state에 대해 반복됩니다. 쿼리에서 cust_address 테이블을 제거하면 올바른 행 수가 표시됩니다. 어떻게 특정 주문과 관련된 Ship_states를 얻을 수 있습니까? 감사.Order_ID가 반복되지 않도록하려면 어떻게해야합니까?

SELECT  
    co.ID AS order_ID, 
    col.PART_ID, 
    col.ORDER_QTY, 
    co.STATUS, 
    co.SHIPTO_ID, 
    co.CUSTOMER_PO_REF, 
    co.CUSTOMER_ID, 
    c.STATE AS Bill_State, 
    ca.STATE AS Ship_State 
FROM   
    dbo.CUSTOMER_ORDER AS co 
INNER JOIN 
    dbo.CUST_ORDER_LINE AS col ON co.ID = col.CUST_ORDER_ID 
INNER JOIN 
    dbo.CUSTOMER AS c ON co.CUSTOMER_ID = c.ID 
INNER JOIN 
    dbo.CUST_ADDRESS AS ca ON c.ID = ca.CUSTOMER_ID 
WHERE  
    (co.ORDER_DATE > '2014-01-01') AND (co.ID NOT LIKE 'rma%') 
ORDER BY order_ID 
+0

명확 다음 CUST_ADDRESS''에 조인 조건에 열을 누락, 우리는 당신이 난을 누락 말할 때 구조와 그 테이블 – Lamak

+0

의 데이터가 무엇을 모르고보다 더 도움이되지 수 열을 조인 조건에 추가하면 다른 조인 조건을 추가하거나 현재 조인 조건을 수정해야합니까? 감사. – Ian

+0

거기에 다른 조인 조건이 필요할 것입니다. 해당 테이블에 고객 당 두 개 이상의 주소가 있습니다. 따라서 중복 결과가 발생합니다. – Lamak

답변

0

이렇게하면 배송 주소마다 고유 한 주문 번호와 주문 번호가 표시됩니다. 다음 과제는 동일한 배송지 및 청구 지 주소가있는 행을 채우는 방법을 찾는 것입니다. 이 주.의 운송 필드는 널 (null)이고 고객 테 이블의 정보가 대신 사용됩니다.

SELECT ca.STATE AS ship_state, 
      co.ID, 
      co.CUSTOMER_ID, 
      ca.ADDR_NO, 
      co.SHIP_TO_ADDR_NO, 
      c.STATE AS Bill_state, 
      c.NAME AS Bill_name, 
      ca.NAME AS Ship_name 
FROM  
     dbo.CUST_ORDER_LINE AS col 
FULL OUTER JOIN 
     dbo.CUSTOMER_ORDER AS co ON col.CUST_ORDER_ID = co.ID 
FULL OUTER JOIN 
     dbo.CUST_ADDRESS AS ca 
FULL OUTER JOIN 
     dbo.CUSTOMER AS c ON ca.CUSTOMER_ID = c.ID 
ON  
     co.CUSTOMER_ID = c.ID 
AND  
     co.CUSTOMER_ID = ca.CUSTOMER_ID 
AND  
     co.SHIP_TO_ADDR_NO = ca.ADDR_NO 
WHERE  
     (co.ORDER_DATE > '2014-1-1') AND (co.ID NOT LIKE 'rma%') 
ORDER BY co.ID  
관련 문제