Access SQL:组合SELECT和USER INPUT

时间:2016-06-23 13:29:33

标签: sql ms-access

我在Access中创建一个表单,用户可以从可能的商品列表中选择商品,然后查询计算所选商品的平均价格。

用户的输入字段是一个列表( List147 )。假设用户选择Copper,那么我想要为Copper返回平均值。所有商品的价格都在一张名为 CommMaterial 的表格中。下面的剪辑显示了表格的样子。

enter image description here

我是SQL的新手,我不知道如何编写代码。似乎SELECT语句需要是动态的,但我不知道如何做到这一点。我设想这样的事情:

SELECT AVG(CommMaterial.[Forms]![NameForm]![List147])
FROM CommMaterial;

1 个答案:

答案 0 :(得分:2)

为了防止动态sql和VBA,您可以使用一些SQL来使您的表格更具查询性:

SELECT DateComm, 'Copper' as Metal, Copper as Price FROM CommMaterial
UNION ALL
SELECT DateComm, 'Nickel' as Metal, Nickel as Price FROM CommMaterial
UNION ALL
SELECT DateComm, 'Aluminum' as Metal, Aluminum as Price FROM CommMaterial;

这将为您提供包含三列的结果集:

DateComm | Metal | Price

您可以将其保存为查询qry_CommMaterial,然后您的SQL将是:

SELECT Avg(Price) FROM qry_CommMaterial WHERE metal = [Forms]![NameForm]![List147];

你也可以把它全部强加到一个大的陈述中:

 SELECT Avg(Price) 
 FROM (
         SELECT DateComm, 'Copper' as Metal, Copper as Price FROM CommMaterial
        UNION ALL
        SELECT DateComm, 'Nickel' as Metal, Nickel as Price FROM CommMaterial
        UNION ALL
        SELECT DateComm, 'Aluminum' as Metal, Aluminum as Price FROM CommMaterial) as subUnion
 WHERE metal = [Forms]![NameForm]![List147];