2015-01-19 3 views
0

Когда я запускаю этот запрос, я получаю повторяющиеся строки. В частности, order_ID повторяется для каждого возможного ship_state, связанного с этим Customer_ID. Если я удалю таблицу 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

Это дало мне уникальные строки заказа и номера заказов для каждого адреса доставки. Следующая задача - выяснить способ заполнения строк, имеющих одинаковый адрес доставки и выставления счетов. Для этих заказов поля доставки являются нулевыми, и вместо этого используется информация из таблицы клиентов.

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  
Смежные вопросы