【问题标题】:Access Query: Use user input to select column for query in sql访问查询:使用用户输入在sql中选择要查询的列
【发布时间】:2020-08-31 01:37:50
【问题描述】:

我是 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)];

【问题讨论】:

  • 规范化表结构,你的生活会简单得多。 EmissionData 有一个字段,EmissionType 有另一个字段。对 EmissionType 字段应用过滤器。编辑问题以将示例数据显示为文本表。
  • 感谢 June7。我理解,但我认为更改表/数据集太难了,所以我希望有一个替代方案。希望您能提供帮助并提出其他选择。

标签: sql ms-access user-controls parameter-passing iif


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

【讨论】:

  • 感谢 June7,但该推荐没有让我得到我正在寻找的结果,这可能是因为我需要添加更多详细信息。我很抱歉。我已尝试添加更多详细信息,以查看您是否可以提供另一种选择。当我开始查询时,会询问我的 3 个参数,但随后会询问其他问题,包括“输入参数值?Emissions_Units.NO2_Emissions”到...“输入参数值?Emissions_Units.PM_Emissions”。但我希望问题在“Enter Max...”之后停止,然后使用选择完成查询,其中 Switch 应该相当于 if-then 语句
  • 建议的查询对我有用。我只收到 3 个提示。编辑问题以将示例数据和所需输出显示为文本表。您尝试的 IIf() 在查询中无效。别名字段名称不能在条件表达式内。另一种方法是使用 UNION 查询。
  • 我让它工作了,耶!我最终在 SELECT SWITCH 部分输入了一个错字。感谢您的时间和帮助。
  • 再次感谢 June7。将另一个表添加到此查询的最佳方法(SQL 代码)是什么,以便我可以为用户输入的结果提供更多详细信息。例如,另一个表 (Unit_Information) 包含位置信息,其中包含标题为“地址”和“状态”的列,我想将它们连接到您帮助我完成的查询的结果。如果有帮助,我已经为这两个表添加了关系。谢谢!
  • 相关如何——哪些字段?可以只在此查询中包含另一个表。使用 Access 查询设计器提供帮助。按照建议,提供样本数据。编辑您的问题或开始另一个问题。
猜你喜欢
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
相关资源
最近更新 更多