How to use another table fields as a criteria for MS Access

后端 未结 2 2072
梦谈多话
梦谈多话 2021-01-22 14:03

This is the MS Access related query.

I have a table with three columns: FName, FValue and VDate in MS Access.(The actual table is quite big bu

相关标签:
2条回答
  • 2021-01-22 14:24

    The 2nd problem is a bit more difficult than the 1st. My approach would be to use 3 separate queries to get the answer:

    Query1 returns a record for each record in the original table, adding the year and quarter from the quarters table. Note that instead of using the quarters table, you could just as easily calculate the year and quarter from the date.

    SELECT Table.FName, Table.FValue, Table.VDate, Quarters.Yr, Quarters.Qtr
    FROM [Table], Quarters
    WHERE (((Table.VDate)>=[start] And (Table.VDate)<=[end]));
    

    Query2 uses the results of Query1 and finds the minimum values you need:

    SELECT Query1.FName, Query1.Yr, Query1.Qtr, Min(Query1.FValue) AS MinValue
    FROM Query1
    GROUP BY Query1.FName, Query1.Yr, Query1.Qtr;
    

    Query3 matches the results of Query1 and Query2 to show the data on which the minimum value was reached. Note that I made this a Sum query and used First(VDate), assumining that the minimum value may have occurred more than once and you need only the 1st time it happened.

    SELECT Query1.FName, Query1.Yr, Query1.Qtr, Query2.MinValue, First(Query1.VDate) AS MidDate, Query1.FValue
    FROM Query1 INNER JOIN Query2 ON (Query1.Qtr = Query2.Qtr) AND (Query1.FValue = Query2.MinValue) AND (Query1.FName = Query2.FName)
    GROUP BY Query1.FName, Query1.Yr, Query1.Qtr, Query2.MinValue, Query1.FValue;
    

    There's probably a clever way to do this all in one query, but this is the way usually solve similar problems.

    0 讨论(0)
  • 2021-01-22 14:28

    Make a new tables "quarters" with fields for Yr, Qtr, Start and End. Start and End are date/time fields:

    Quarters
    Yr      Qtr Start       End
    
    2014    1   1/1/2014    3/31/2014
    2014    2   4/1/2014    6/30/2014
    2014    3   7/1/2014    10/31/2014
    

    Then use this query:

    SELECT Quarters.Yr, Quarters.Qtr, Table.FName, Min(Table.FValue) AS FValue
    FROM [Table], Quarters
    WHERE (((Table.CDate)>=[start] And (Table.CDate)<=[end]))
    GROUP BY Quarters.Yr, Quarters.Qtr, Table.FName;
    

    Note - there is no join between the two tables in the query.

    0 讨论(0)
提交回复
热议问题