Установить критерии приоритета в строках в Query
Любые идеи о том, как расставить приоритеты строки с критериями из того же материала? Мне нужно зафиксировать значение SG(деление) в моем запросе. У меня есть базовый запрос, состоящий только из 227 288 строк, и из исходного файла, в котором я получаю эти значения ниже, примерно 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 значение Price, которое я получаю, равно 90, когда предположительно мне нужно иметь значение 35 из SG2011, отличное от SG2011, все значения из другого подразделения в порядке, т.е. для b6790 это нормально иметь значение цены 20. подразделение SG2011 цена является приоритетной для материалов.
Я использую MS Access 2007, я делаю вещи в режиме конструктора или SQL. Жаль, что вы, ребята, не могли бы помочь мне с простыми кодами.. (если... заявления или просто в представлении дизайна..) или представлением 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 - (я просто сделал поле scop 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;
2 ответа
РЕШЕНО: из опубликованной проблемы я создал серию запросов. из исходной исходной таблицы, которую я создал, 1-й: Материал с уникальным количеством (сделано с помощью критериев 1) 2-й: Материал без деления SG и 3-й: Материал с делением 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;
`
Я пришел с моими правильными ценностями.
Не уверен, что я понял, но для DIVISION
самого низкого идентификатора для каждого 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)