首页 > 解决方案 > 访问查询:使用用户输入在sql中选择要查询的列

问题描述

我是 ACCESS 和 SQL 的新手。如果我误用了某些参考文献和术语,我深表歉意。我正在尝试使用用户输入来选择表中的一个字段,然后根据用户条件过滤该字段中的数据。

我有一个Emissions_Units包含许多列的表格,我想为用户制作一个漂亮的表格来选择污染物(这是我表格中的一列),然后选择适用于该污染物的标准(即表格中的列)。表中的污染物或列包括CO_EmissionsNO2_EmissionsPM_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)];

标签: sqlms-accessuser-controlsparameter-passingiif

解决方案


此查询有效:

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 所以我改写了提示。但是,不是在查询中弹出提示,而是在表单上引用控件以供用户输入。


推荐阅读