如何使用另一个表字段作为MS Access的条件

时间:2014-04-17 09:50:22

标签: sql ms-access

这是MS Access相关查询。

我有一个包含三列的表:MS Access中的FName, FValue and VDate。(实际的表非常大,但以下示例仅供参考。) !http://postimg.org/image/bx0grwoa3/

现在我想获得以下类型的查询输出:获取每个唯一名称的最小季度值。例如: !http://postimg.org/image/je1w7gdi1/

到目前为止,我可以通过硬编码标准获得四分之一的输出,使用以下内容(在MS Access中)

SQL字符串是:

SELECT Table.FName, Min(Table.FValue) AS MinOfFValue, First(Table.VDate) AS FirstOfVDate
FROM [Table] LEFT JOIN [Table] AS Table_1 ON Table.FValue = Table_1.FValue
WHERE (((Table.VDate)>#3/31/2014# And (Table.VDate)<#7/1/2014#))
GROUP BY Table.FName;

现在,我希望日期不是硬编码的推出日期,而是希望日期成为表格的一部分,其中季度名称,日期和日期都在那里,Access逐个接受它们并提供所需的输出。

提前致谢。

2 个答案:

答案 0 :(得分:1)

使用Yr,Qtr,Start和End字段创建一个新表“quarters”。开始和结束是日期/时间字段:

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

然后使用此查询:

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;

注意 - 查询中的两个表之间没有连接。

答案 1 :(得分:0)

第二个问题比第一个问题困难一些。我的方法是使用3个单独的查询来得到答案:

Query1返回原始表中每条记录的记录,从季度表中添加年份和季度。请注意,您可以轻松计算自该日期起的年份和季度,而不是使用季度表。

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

Query2使用Query1的结果并找到所需的最小值:

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

Query3匹配Query1和Query2的结果,以显示达到最小值的数据。请注意,我将此作为Sum查询并使用First(VDate),假设最小值可能多次发生,并且您只需要第一次发生。

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;

在一个查询中,这可能是一种聪明的方法,但这通常可以解决类似的问题。