2012-07-23 72 views
2

我正在尝试为小公司开发基于访问的数据库。我做了几张桌子,其中一些是“2011/2012总产量以美元计”和“2011/2012以CY总产量”。 所有四个表都有一列“实际产量”ms查询人最短日期月查询

现在,使用查询工具,我要实现两个目标。

  1. 获得每月的最高和最低生产一年
  2. 显示当实际产量为最大/最小的月份日期

我完成了第一个任务w这很简单;进行查询,获取相关字段,最后以月份形式分发。 I.e Jan Max 5000,2000年2月... 2月最大6000最小1000

现在我希望显示月份的最大或最小生产日期。因此,如果4月份的MAX为181,218.00,我希望它显示发生的日期(i,e 2012年4月10日)

我是Access的初学者,所以请尽可能简单。从收集到的意见

的样本数据:

Month   Sum of Prod Min Prod in $ Max Prod in $ 
------------- ------------- ------------- ------------- 
January 2011 $1,184,096.98 $20,486.40 $171,470.40 
February 2011 $1,558,072.20 $44,962.20 $116,359.20 
March 2011 $1,744,442.19 $19,200.00 $141,065.10 
April 2011 $1,698,608.63 $27,500.70 $181,218.00 
May 2011  $1,826,915.38 $37,996.00 $130,066.00 
June 2011  $2,317,890.71 $42,645.00 $144,323.30 

上述数据是由几个查询gnerated字段。

我所寻找的是

Month   Date of Min Prod Min Prod in $ Date of Max Prod Max Prod in $ 
------------- ------------- ------------- -------------  ------------- 
January 2011  Jan 15  $20,486.40  Jan 10   $171,470.40 
February 2011 Feb 20  $44,962.20  Feb 27   $116,359.20 
March 2011  March 10  $19,200.00  March 1  $141,065.10 

等等。

是否可以使用查询来产生这个结果?

谢谢!

与评论的关系。

其中一个表中的相关字段是。

Date of Activity Actual Production 
------------- ------------- ------- 
1/3/2012    $20,486.40  
1/4/2012    $44,962.20  
1/5/2012    $19,200.00  
+0

urgghhh ...甚至不能在这里适当的列显示我的问题 – Abbas 2012-07-24 13:38:22

+0

我刚刚编辑了问题Thankyou汉斯。 该查询是从两个表中生成的,一个以$ amount生产,另一个以Cubic Yard生产。 这些表格有一些计算字段和两个需要用户输入的字段(日期和实际生产)。 (为清楚起见,在问题中发布的表) – Abbas 2012-07-24 14:09:31

+0

这完全是我所需要的。 抱歉的混淆。我不能够感谢你! YOU ROCK !!! :D – Abbas 2012-07-24 19:01:31

回答

0

我迷失在你的问题的细节。因此,我会向您展示示例数据和查询,以获取我希望从数据中获得的内容。

这里是tblAbbas的内容。

activity_date actual_production 
1/3/2012    $20,486.40 
1/4/2012    $44,962.20 
1/5/2012    $19,200.00 
2/1/2012     $3.00 
2/2/2012     $2.00 
2/3/2012     $1.00 

这是用于名为qryMonthStart的查询的SQL。此查询的目的是确定包含activity_date的月份的第一天。

SELECT 
    DateSerial(Year(activity_date),Month(activity_date),1) 
     AS month_start, 
    activity_date, 
    actual_production 
FROM tblAbbas; 

以下查询使用qryMonthStart作为其数据源,并为我提供此结果集。

month_year SumOf_production min_prod_date MinOf_production max_prod_date MaxOf_production 
January 2012  $84,648.60  1/5/2012  $19,200.00  1/4/2012  $44,962.20 
February 2012   $6.00  2/3/2012   $1.00  2/1/2012   $3.00 

而查询SQL ...

SELECT 
    Format(grpby.month_start,"mmmm yyyy") AS month_year, 
    grpby.SumOf_production, 
    qmin.activity_date AS min_prod_date, 
    grpby.MinOf_production, 
    qmax.activity_date AS max_prod_date, 
    grpby.MaxOf_production 
FROM 
    (
    (
     SELECT 
      month_start, 
      Sum(actual_production) AS SumOf_production, 
      Min(actual_production) AS MinOf_production, 
      Max(actual_production) AS MaxOf_production 
     FROM qryMonthStart 
     GROUP BY month_start 
    ) AS grpby 
    INNER JOIN qryMonthStart AS qmin 
    ON 
      (grpby.MinOf_production = qmin.actual_production) 
     AND (grpby.month_start = qmin.month_start) 
    ) 
    INNER JOIN qryMonthStart AS qmax 
    ON 
      (grpby.MaxOf_production = qmax.actual_production) 
     AND (grpby.month_start = qmax.month_start) 
ORDER BY grpby.month_start; 

当心,如果你对activity_date有空该查询将失败(“标准表达式中数据类型不匹配”)。最简单的方法是清除空值,然后在activity_date列中禁止它们(在表设计视图中将Required属性设置为Yes)。如果您决定在activity_date必须允许空值,那么您有更多的工作要做。

另外请注意,查询会给你多行对同一month_year如果在日常记录为每月超过一个actual_production值的月最低(MinOf_production)相匹配。同样的情况将适用于每月最高限额(MaxOf_production)。