2013-08-06 4 views
-1

у меня есть две таблицы в MS Access 2010:Объединить две таблицы и отчетливые записи

ЧАСТЬ LOG-OUT ТАБЛИЦА:

PART_ID DRAWN_DATE LOCATION_ID 
C0001 07/29/2013  501 
C0002 07/29/2013  604 
C0003 08/01/2013  703 
C0004 08/01/2013  807 
C0005 08/02/2013  505 
C0006 08/02/2013  602 
C0007 08/02/2013  707 
C0008 08/03/2013  802 
C0009 08/03/2013  803 
C0001 10/01/2013  605 
C0002 10/02/2013  704 
C0004 10/05/2013  806 

ЧАСТЬ ВОЗВРАТ ТАБЛИЦА:

PART_ID RETURN_DATE LOCATION_ID 
C0001 09/04/2013  STORE 
C0002 09/05/2013  STORE 
C0004 09/10/2013  STORE 
C0007 09/12/2013  STORE 
C0008 09/13/2013  STORE 
C0002 10/03/2013  STORE 

Это Я хочу:

PART_ID DRAWN_DATE LOG-OUT LOCATION RETURN_DATE RETURN LOCATION 
C0001 07/29/2013  501  09/04/2013  STORE 
C0001 10/01/2013  605 
C0002 07/29/2013  604  09/05/2013  STORE 
C0002 10/02/2013  704  10/03/2013  STORE 
C0003 08/01/2013  703 
C0004 08/01/2013  807  09/10/2013  STORE 
C0004 10/05/2013  806   
C0005 08/02/2013  505 
C0006 08/02/2013  602 
C0007 08/02/2013  707  09/13/2013  STORE 
C0008 08/03/2013  802  10/03/2013  STORE 
C0009 08/03/2013  803 

B у я могу получить только это:

PART_ID DRAWN_DATE LOG-OUT LOCATION RETURN_DATE RETURN LOCATION 
C0001 07/29/2013  501  09/04/2013  STORE 
C0001 10/01/2013  605  `09/04/2013  STORE` 
C0002 07/29/2013  604  09/05/2013  STORE 
`C0002 07/29/2013  604`  10/03/2013  STORE 
C0002 10/02/2013  704  `09/05/2013  STORE` 
`C0002 10/02/2013  704  10/03/2013  STORE` 
C0003 08/01/2013  703 
C0004 08/01/2013  807  09/10/2013  STORE 
C0004 10/05/2013  806  `09/10/2013  STORE` 
C0005 08/02/2013  505 
C0006 08/02/2013  602 
C0007 08/02/2013  707  09/13/2013  STORE 
C0008 08/03/2013  802  10/03/2013  STORE 
C0009 08/03/2013  803 

после того, как я написал:

SELECT L.PART_ID, L.DRAWN_DATE, L.LOCATION_ID AS [LOG-OUT LOCATION], R.RETURN_DATE, R.LOCATION_ID AS RETURN_LOCATION FROM (SELECT * FROM [PART LOG-OUT] ORDER BY PART_ID) AS L LEFT JOIN (SELECT * FROM [PART RETURN] ORDER BY PART_ID) AS R ON L.PART_ID = R.PART_ID ORDER BY L.PART_ID, L.DRAWN_DATE, R.RETURN_DATE;

Может кто-нибудь поправьте меня? Благодаря!

ответ

1

Ваши требования немного расплывчатым, так что я может быть выключен, но вы, кажется, хотят спариваться возвращается со временем, которые, прежде чем только возвращение, что-то вроде этого?

SELECT L.PART_ID, L.DRAWN_DATE, L.LOCATION_ID AS [LOG-OUT LOCATION], 
     MIN(R.RETURN_DATE), MIN(R.LOCATION_ID) AS RETURN_LOCATION 
FROM (SELECT * FROM [LOG_OUT LOCATION]) AS L 
LEFT JOIN (SELECT * FROM [PART_RETURN]) AS R 
    ON L.PART_ID = R.PART_ID AND L.DRAWN_DATE < R.RETURN_DATE 
GROUP BY L.LOCATION_ID,L.PART_ID,L.DRAWN_DATE 
ORDER BY L.PART_ID, L.DRAWN_DATE, MIN(R.RETURN_DATE) 

An SQLfiddle to test with.

Обратите внимание, что, поскольку ничего не происходит при объединении одной покупки с одним возвратом (и нет такого образца в вашем вопросе), логика очень проста для их объединения.

+0

Да, это то, что я ищу. Большое спасибо! – user2652375

+0

После некоторых поправок SELECT L.PART_ID, L.DRAWN_DATE, L.LOCATION_ID AS [LOG-OUT LOCATION], MIN (R.RETURN_DATE), MIN (R.LOCATION_ID) AS RETURN_LOCATION FROM (SELECT * FROM [PART LOG -OUT]) AS L LEFT JOIN (SELECT * FROM [PART RETURN]) AS R ON L.PART_ID = R.PART_ID AND L.DRAWN_DATE user2652375

0

Как вы присоединяетесь к колонке PART_ID, результат, который вы получаете, - это то, что вы ожидаете получить.

Например, есть два C0001 в LOG-OUT таблицы, и они присоединятся к одному и тому же C0001 в PART RETURN таблицы, нет ничего, чтобы distringuish строки в обратной таблице друг от друга:

PART LOG-OUT TABLE   -> PART RETURN TABLE 
C0001 07/29/2013  501 -> C0001 09/04/2013  STORE 
C0001 10/01/2013  605 -> C0001 09/04/2013  STORE 

Вам нужны другие критерии для присоединения, или вам нужно присоединиться к еще одному уникальному идентификатору, чтобы достичь результатов, которые вы ищете.

+0

Любое предложение? – user2652375

+0

Если 'C0001,07/29/2013,501' следует соединить, и' C0001,10/01/2013,605' не должно быть, вам нужно найти способ отличить их. Основываясь на структуре таблицы, которую вы показали, я не вижу способа ее достижения, потому что нет способа узнать, к какому 'C0001' вам следует присоединиться в' PART RETURN TABLE'. –

0
SELECT L.PART_ID, L.DRAWN_DATE, L.LOCATION_ID AS [LOG-OUT LOCATION], R.RETURN_DATE, R.LOCATION_ID AS RETURN_LOCATION FROM (SELECT * FROM [PART LOG-OUT] ORDER BY PART_ID) AS L LEFT OUTER JOIN (SELECT * FROM [PART RETURN] ORDER BY PART_ID) AS R ON L.PART_ID = R.PART_ID ORDER BY L.PART_ID, L.DRAWN_DATE, R.RETURN_DATE; 
+0

LEFT OUTER JOIN будет преобразован в LEFT JOIN после запуска программы. – user2652375

Смежные вопросы