2016-07-14 3 views
0

Доброе утро!(MS ACCESS) SQL для объединения объединенного оператора

У меня есть MS Access разделить базу данных (не используется MS SQL Server (еще)) вот присоединиться несколько таблиц с темп запроса (изобретательно называется «Темп»!)

SELECT table_CORE.[core-ID], 
table_CORE.[PO], 
table_CORE.[Part], 
table_CORE.[Part Rev], 
table_CORE.[Supplier DoC#], 
table_CORE.[Sup Doc Rev], 

table_DATES.[date-ID], 
table_DATES.[iteration], 

table_REJECTIONS.[rejection-ID], 
table_REJECTIONS.[iteration], 
table_REJECTIONS.[reason], 
table_REJECTIONS.[details], 
table_REJECTIONS.[timestamp] 

FROM 
    (
     (
      table_CORE INNER JOIN [TEMP] 
      ON table_CORE.[core-ID] = TEMP.[date-ID] 
     ) 
     INNER JOIN [table_DATES] 
      ON TEMP.[date-ID] = table_DATES.[date-ID] 
      AND TEMP.[iteration]=table_DATES.[iteration] 
    ) 
    INNER JOIN table_REJECTIONS 
     ON TEMP.[date-ID] = table_REJECTIONS.[rejection-ID] 
     AND TEMP.[iteration]=table_REJECTIONS.[iteration] 
WHERE table_CORE.[core-ID] Like '*' 

Так в конечном счете, это отображает список отказов документов - это нормально, за исключением того, что каждый документ применяется к нескольким частям.

Вы можете связать ПО, части и части Rev разрушаться эти отказы в единый документ - проблема, я обычно это сделать с GROUP BY клауса ...

... кроме «подробнее "- это тип данных memo, и при попытке предложения GROUP BY доступ обрезается до 256 символов.

Любые идеи, как обойти это? Я пробовал предложение группы, прежде чем присоединять его к таблице rejeciton, но в итоге у меня та же проблема (в том, что есть множественные отклонения с одним и тем же PO, номером Part и Revision, связанным вместе) - и я изучаю другие методы , но я просто не могу обойти SQL-запрос, необходимый для этого!

Большое спасибо!

Если вам нужна дополнительная информация, просто дай мне крик!

--- Дополнительная информация ---

Пример:

ID  PO  Part Rev reason details 
1  111  A1  A error some_details1 
2  111  A1  A error some_details1 
3  111  A1  A error some_details1 
4  222  A1  A error some_details1 
6  222  A1  A error some_details1 
7  333  B1  A error some_details1 
8  333  B1  A error some_details1 
9  444  B1  A error some_details1 
10  555  C1  A error some_details1 

должен быть изменен на:

PO  Part Rev reason details 
111  A1  A error some_details1 
222  A1  A error some_details1 
333  B1  A error some_details1 
444  B1  A error some_details1 
555  C1  A error some_details1 

Примечание о том, как функция присоединиться работает:

Текущие товары хранятся в CORE и привязаны к датам с отношением «один ко многим» на core-ID >> date-ID, который затем использует итерацию, чтобы получить самое последнее событие в истории этой части.

Это самое последнее событие, затем присоединился к списку отбраковки с помощью ID core->> rejeciton-ID И финиковой итерацию >> rejectioniteration вернуть себе активные отказы.

+0

Зачем вам нужно заполнять группу? У вас есть пример неудавшегося запроса, и есть ли у вас пример данных, чтобы показать, что вы хотите выбраться из запроса? – dbmitch

+0

@dbmitch, и есть проблема: у нас есть дубликаты, которые нужно сгруппировать по номеру PO/Part Number/Revision, а затем привязаны к оставшемуся полю детали, но я не могу обойти группу BY BY для просто hte PO/Part/Revision, а затем правильно вписывается в поле сведений. Скопируйте более подробную информацию в ближайшее время –

ответ

0

Оказывается, я могу обмануть и заставить MS написать мой SQL для меня!

В соответствии с рекомендацией от AllenBrowne в редакторе запросов (вместо работы с SQL Directly) и агрегации таблиц_REJECTIONS.details с использованием FIRST() вместо GROUP BY() исправлено это!

Какая неприятность для кода, хотя - необработанный SQL для запроса показан ниже.

SELECT table_CORE.PO, 
table_CORE.Part, 
table_CORE.[Part Rev], 
table_CORE.[Supplier DoC#], 
table_CORE.[Sup Doc Rev], 
table_REJECTIONS.reason, 
First(table_REJECTIONS.details) AS details 

FROM 
    (
     (
     table_CORE INNER JOIN TEMP 
     ON table_CORE.[core-ID] = TEMP.[date-ID] 
     ) 
     INNER JOIN table_DATES 
     ON 
      (
       TEMP.[iteration] = table_DATES.[iteration] 
      ) 
     AND 
      (
       TEMP.[date-ID] = table_DATES.[date-ID] 
      ) 
    ) 
     INNER JOIN table_REJECTIONS 
     ON 
     (
      TEMP.[iteration] = table_REJECTIONS.[iteration] 
     ) 
    AND 
     (
      TEMP.[date-ID] = table_REJECTIONS.[rejection-ID] 
     ) 

WHERE table_CORE.[core-ID] Like '*' 
GROUP BY table_CORE.PO, 
table_CORE.Part, 
table_CORE.[Part Rev], 
table_CORE.[Supplier DoC#], 
table_CORE.[Sup Doc Rev], 
table_REJECTIONS.reason; 
Смежные вопросы