Запрос доступа: используйте пользовательский ввод, чтобы выбрать столбец для запроса в sql

Я новичок в ACCESS и SQL. Мои извинения, если я неправильно использую некоторые ссылки и термины. Я пытаюсь использовать пользовательский ввод, чтобы выбрать поле в моей таблице, а затем отфильтровать данные в этом поле на основе пользовательских критериев.

У меня есть таблица Emissions_Units со многими столбцами, и я хочу создать удобную форму, чтобы пользователь мог выбрать загрязняющее вещество (столбец в моей таблице), а затем выбрать критерии для применения к этому загрязнителю (т.е. столбец в таблице). Загрязняющие вещества или столбцы в таблице включают CO_Emissions, NO2_Emissions, PM_Emissions.

Затем, как только столбец выбран, я хочу отфильтровать этот столбец на основе пользовательских максимальных и минимальных критериев. Затем пусть запрос представит результаты.

Я включил некоторый код SQL, над которым я работал, который не работает, но может показать, что я пытаюсь сделать. Я также пробовал SWITCH вместо IIF. Если это возможно, я хотел бы также получить информацию из других столбцов этой таблицы, которые соответствуют строкам из запроса. Например, я хотел бы извлечь информацию из столбцов «Имя» и «Местоположение», связанных со строками, которые соответствуют результатам ввода пользователя.

PARAMETERS [Enter Pollutant to Review (CO, NO2, PM):] Text, [Enter Maximum Emissions (0.00 g/s):] Number, [Enter Minimum Emissions (0.00 g/s):] Number;

SELECT
    IIF([Enter Pollutant to Review (CO, NO2, PM):] = "CO", Emissions_Units.CO_Emissions AS CalcValues,
    IIF([Enter Pollutant to Review (CO, NO2, PM):] = "NO2", Emissions_Units.NO2_Emissions AS CalcValues,
    IIF([Enter Pollutant to Review (CO, NO2, PM):] = "PM", Emissions_Units.PM_Emissions AS CalcValues, 'Retry' )
  )
)
FROM Emissions_Units
WHERE CalcValues >= [Enter Minimum Emissions (0.00 g/s)] 
  AND CalcValues <= [Enter Maximum Emissions (0.00 g/s)];

person RIM    schedule 31.08.2020    source источник
comment
Нормализуйте структуру таблицы, и ваша жизнь станет намного проще. Имейте одно поле для EmissionData и другое поле для EmissionType. Примените фильтр к полю EmissionType. Отредактируйте вопрос, чтобы показать образцы данных в виде текстовой таблицы.   -  person June7    schedule 31.08.2020
comment
Спасибо 7 июня. Я понимаю, но думаю, что изменить таблицу/набор данных будет слишком сложно, поэтому я надеялся на альтернативу. Я надеюсь, что вы можете помочь и предложить некоторые другие варианты.   -  person RIM    schedule 01.09.2020


Ответы (1)


Этот запрос работает:

PARAMETERS [Enter Pollutant to Review (CO, NO2, PM):] Text, [Enter Minimum Emissions in gps] Number, [Enter Maximum Emissions in gps] Number;

SELECT *, Switch([Enter Pollutant to Review (CO, NO2, PM):] = "CO", Emissions_Units.CO_Emissions,
  [Enter Pollutant to Review (CO, NO2, PM):] = "NO2", Emissions_Units.NO2_Emissions,
  [Enter Pollutant to Review (CO, NO2, PM):] = "PM", Emissions_Units.PM_Emissions) AS CalcValues
 
FROM Emissions_Units

WHERE Switch([Enter Pollutant to Review (CO, NO2, PM):] = "CO", Emissions_Units.CO_Emissions,
  [Enter Pollutant to Review (CO, NO2, PM):] = "NO2", Emissions_Units.NO2_Emissions,
  [Enter Pollutant to Review (CO, NO2, PM):] = "PM", Emissions_Units.PM_Emissions)

BETWEEN [Enter Minimum Emissions in gps] AND [Enter Maximum Emissions in gps];

Предложению PARAMETERS не понравилось значение 0.00, поэтому я переформулировал подсказки. Однако вместо всплывающей подсказки в запросе ссылайтесь на элементы управления формы для пользовательского ввода.

person June7    schedule 31.08.2020
comment
Спасибо, 7 июня, но рекомендация не дала мне желаемых результатов, возможно, потому, что мне нужно добавить больше деталей. Мои извинения. Я попытался добавить больше деталей, чтобы увидеть, можете ли вы предоставить другой вариант. Когда я запускаю запрос, задаются мои 3 параметра, но затем задаются дополнительные вопросы, в том числе «Введите значение параметра?». Выбросы_Единицы.NO2_Выбросы через ...Введите значение параметра ? Выбросы_Единицы.PM_Выбросы. Но я хочу, чтобы вопросы прекращались после Enter Max... Затем используйте выбор для завершения запроса, где Switch должен быть эквивалентен операторам if-then - person RIM; 01.09.2020
comment
Предлагаемый запрос работает для меня. Я получаю только 3 подсказки. Отредактируйте вопрос, чтобы отобразить образцы данных и желаемый результат в виде текстовых таблиц. Ваша попытка IIf() недействительна в запросе. Имя поля псевдонима не может находиться в условном выражении. Другой подход будет включать запрос UNION. - person June7; 01.09.2020
comment
Я заставил его работать, ура! В итоге у меня была опечатка в разделе SELECT SWITCH. Спасибо за ваше время и помощь. - person RIM; 01.09.2020
comment
Еще раз спасибо, 7 июня. Каким будет лучший метод (код SQL) для добавления еще одной таблицы к этому запросу, чтобы я мог предоставить дополнительные сведения о результатах пользовательского ввода. Например, другая таблица (Unit_Information) содержит информацию о местоположении со столбцами Address и State, которые я хотел бы связать с результатами запроса, с которым вы мне помогли. Я уже добавил отношение к этим двум таблицам, если это поможет. Спасибо! - person RIM; 01.09.2020
comment
Связано как - какие поля? Можно просто включить другую таблицу в этот запрос. Используйте конструктор запросов Access, чтобы помочь. Как было предложено, предоставьте образцы данных. Отредактируйте свой вопрос или задайте другой. - person June7; 02.09.2020
comment
Я понял. Еще раз спасибо за вашу помощь и время 7 июня! - person RIM; 02.09.2020