2016-10-13 4 views
0

любые идеи о том, как определить приоритет строки с критериями с одним и тем же материалом? Мне нужно зафиксировать значение SG (деление) в моем запросе. У меня есть базовый запрос только из 227 288 строк, а из необработанного файла, который Im получает эти значения ниже, составляет около 300,00 ++, моя проблема заключается в том, что когда я запускаю свой запрос с базовым номером, он захватывает только первый материал из строк.Установить критерии приоритета в строках в запросе

ID    MATERIAL    DIVISION     SCOP(price) 

1     a9000     FR390      90 
2     b6790     TB900      20 
3     a9000     SG2011     35 
4     b6790     EU8089     90 

сверху, например из 227,288 файлов, для материала A9000 с ценой я получаю 90, когда, мол, мне нужно иметь значение 35 из SG2011, кроме SG2011, все значения из другого подразделения в порядке, то есть для b6790 это нормально, чтобы цена была равна цене 20. деление цена SG2011 для материалов.

Я использую MS Access 2007, я занимаюсь дизайном или представлением SQL. желаю вам, ребята, могли бы помочь мне с простыми кодами .. (iff..statements или просто с точки зрения дизайна ..) или вид SQL в MS Access

Редактировать

Ниже мой SQL запрос (тест-запрос - это не осталось присоединиться к основной запрос, поскольку он не отвечает количество строк, но я был в состоянии показать несколько материалов)

SELECT Base_CSC.ID, Base_CSC.Material, SC_and_Purchase_Price.[Logistic Ref], SC_and_Purchase_Price.[Commercial Ref], Left([Division],2) & ([Commercial Ref]) AS [Comm Ref], Left([Division],2) & ([Logistic Ref]) AS [Log Ref], IIf(Left([Comm Ref],'2')="SG",[SCOP],'') AS [SCOP SG], SC_and_Purchase_Price.[SC in AUD] AS SCOP 
FROM Base_CSC LEFT JOIN SC_and_Purchase_Price ON (Base_CSC.Material = SC_and_Purchase_Price.[Commercial Ref]) AND (Base_CSC.Material = SC_and_Purchase_Price.[Logistic Ref]) 
ORDER BY Base_CSC.ID; 

Query Test - изображение моего тестового запроса, чтобы показать материалы. как показано Материал: LV433620 имеет 3 результата для материала. но когда я запускаю мой последний запрос

Final Output Query - изображение моего вывода запроса

LV433620 материал принял значение первой линии, когда якобы мне нужен выход SCOP SG - (я только что сделал поле барда SG в различают), так что вместо 257.42. Мне нужно значение SCOP 215.50 для материала LV433620.

ниже для окончательного вывода запроса зрения SQL

SELECT Base_CSC.ID, Base_CSC.Material, Base_CSC.[Vendor Reference], Base_CSC.[Default Vendor], First(IIf(IsNull([scop3_v2.SCOP]),[scop3_v2_1.SCOP],[scop3_v2.SCOP])) AS SCOP 
FROM (Base_CSC LEFT JOIN scop3_v2 AS scop3_v2_1 ON Base_CSC.Material = scop3_v2_1.scop1.SCOPLookup) LEFT JOIN scop3_v2 ON Base_CSC.Material = scop3_v2.scop2.SCOPLookup 
GROUP BY Base_CSC.ID, Base_CSC.Material, Base_CSC.[Vendor Reference], Base_CSC.[Default Vendor] 
ORDER BY Base_CSC.ID; 
+0

формат, который вы правильно отвечаете @anne –

+0

Ваш вопрос довольно расплывчатый. Если есть какая-либо запись для конкретного материала, имеющего подразделение SG2011, то получить цену, связанную с SG2011 (какая цена, самая низкая, самая высокая, так как может быть несколько строк на комбинацию материалов/делений?). В противном случае, самая низкая (?) Цена ?. что ты уже испробовал? Пожалуйста, укажите любые вопросы. – Rene

+0

привет @saurabhkamble Я отредактировал, что бы вы могли помочь. спасибо – Anne

ответ

0

РЕШИТЬ : из опубликованной проблемы я создал серию запросов.из исходной таблицы, которую я создал 1-й: материал с уникальным счетом (сделано с критериями 1). 2-й: материал с разделом SG и третьим: материал с подразделением SG,

с данным кодом под запрос Material БЕЗ SG

`SCOPE: IIf([Query_SC_and_Purchase_Price_Scope_SG].[SCOPE] Is Null,[Query_SC_and_Purchase_Price_Scope_NO_SG].[SCOPE],[Query_SC_and_Purchase_Price_Scope_SG].[SCOPE])` 

Это для материала с SG Код запроса

SCOP: IIf([Query_SC_and_Purchase_Price_Scope_SG].[SCOPE] Is Null,[Query_SC_and_Purchase_Price_Scope_NO_SG].[SCOPE],[Query_SC_and_Purchase_Price_Scope_SG].[SCOPE]) 

Собрав все эти проверки и ДАННЫЕ Я создал запрос UNION ALL

`SELECT Query_SC_and_Purchase_Price_Scope_Unique.* 
    FROM Query_SC_and_Purchase_Price_Scope_Unique 
    UNION ALL 
    SELECT Query_SC_and_Purchase_Price_Scope_SGNOSG_SG.* 
    FROM Query_SC_and_Purchase_Price_Scope_SGNOSG_SG 
    UNION ALL SELECT Query_SC_and_Purchase_Price_Scope_SGNOSG_NOSG.* 
    FROM Query_SC_and_Purchase_Price_Scope_SGNOSG_NOSG; 
    ` 

Я пришел с моими правильными значениями.

0

Не уверен, что я понял, но для DIVISION самого низкого ID для каждого MATERIAL вы можете использовать NOT EXISTS():

SELECT * FROM YourTable t 
WHERE NOT EXISTS(SELECT 1 FROM YourTable s 
       WHERE t.Material = s.material AND s.id > t.id) 
+0

У меня есть базовый запрос с именем (Base_Query) с 227 288 строками, где я оставил соединение в таблице (таблица Purchase) источником сырых файлов деления и цен с 300,00 ++ строк. мой выполненный выходной запрос должен содержать только 227 288 в соответствии с базовыми строками. их свойства соединения - столбец «Материал». моя проблема заключается в том, что запрос занимает только первую строку материала для дубликатов, как показано выше для дублирующего материала a9000, для чего потребовалась цена подразделения FR390 (цена: 90), где мне нужно иметь стоимость цены SG2011. – Anne

+0

Опубликуйте свой запрос и актуальный и необходимый результат. Это может помочь прояснить, что вам нужно (вы упорствуете в том, что совершенно расплывчаты). И ОТВЕТИТЕ, когда кто-то просит вас уточнить. – Rene

+0

привет @Rene Я отредактировал. желаю вам помочь. благодаря – Anne