使用变量从FORM运行查询

时间:2016-04-25 14:28:55

标签: sql vba ms-access

我需要计算2个零售商之间的加权价格指数(按零售商1的营业额加权)。我需要使用不同的Item组合计算这个索引(不同的前n个)。

表1包含有关区域周项目级别的数据 Table1

加权的基本方法是:

  

SUM(price1 / price2 *营业额)/ SUM(营业额)

我使用以下Query语句计算它:

Excel::load("storage/app/notes.csv", function($reader) {
    $loopclient = -1; //Or proper initial value
    $reader->each(function($row) use (&$loopclient) { //Loop through row by row

        if (strlen($row->client_id) == 5) {
            $loopclient = $row->client_id;
            $this->line('client'.$loopclient);
        } else {
            //Our note should have client ID of loopclient
            $this->info($loopclient.": ".$row->client_id);
        }

    });
 })->get();

根据业务需求,我通常需要用不同的产品组计算这个指数 - 只有私有标签,只有蔬菜或 - 最简单的例子 - 仅适用于TOP n产品(基于2016年第一季度的营业额)。 / p>

我想在Access中使用带有几个参数的VBA创建一个简单的表单。

表格示例
Form example

我有包含项目代码描述的词典表(仅选择啤酒类别)和TOP 500排名表。我做了一个查询,它有效 - 它加入了前500个表(它只包含需要代码的代码列。我可以手动编写TOP代码的数量(用***突出显示字符串)。

 SELECT week, SUM(price1/price2 * turnover)/SUM(turnover) AS [PriceIndex]
 FROM Table1
 GROUP BY week;

现在的主要问题。如何制作插图形式?

我已经开始了:

SELECT week, SUM(price1/price2 * turnover)/SUM(turnover) AS [PriceIndex]
FROM Table1 AS F INNER JOIN TopTable AS T ON F.code=T.code
WHERE F.code IN (
***SELECT TOP 500 code
FROM TopTable)
GROUP BY week;

我只需要使用表单变量top_num执行SQL语句。

1 个答案:

答案 0 :(得分:0)

因此,如果您想在表单中显示查询结果,则必须在子表单中进行查询。

创建子表单

  1. 创建一个新表单,将其命名为Subform1或您喜欢的任何其他内容。单击表单左上角的方块,然后打开属性窗口。在“格式”,“默认显示”下,选择“数据表”。

  2. 您的查询返回2列,因此您需要在表单上添加2个文本框

  3. 您必须将文本框绑定到查询返回的列名:选择文本框并带上属性窗口,在“数据”选项卡下第一个字段是“控制源”,在那里指定查询列名称:week用于一个文本框,PriceIndex用于其他文本框

  4. 您的子表单已准备就绪,保存并关闭。

    将子表单添加到表单

    在设计模式下打开主窗体并向其添加SubForm控件。创建控件时,向导会询问您的控件数据来源,选择SubForm1

    调整代码

    Private Sub Command_Click()
    
    Dim top_num As Long
    Dim SQL As String
    
    top_num = Top_number.Value
    
    sSQL = _
    "SELECT week, SUM(price1/price2 * turnover)/SUM(turnover) AS [PriceIndex]" & _
    "FROM Table1 AS F INNER JOIN TopTable AS T ON F.code=T.code" & _
    "WHERE F.code IN ( " & _
    "***SELECT TOP " & top_num & " code" & _
    "FROM TopTable)" & _
    "GROUP BY week;"
    
    ' Add This :
    Me!subform1.Form.RecordSource = sSQL
    
    
    End Sub
    

    你已经完成了