查询 MS Access 多个条件(where)

Posted

技术标签:

【中文标题】查询 MS Access 多个条件(where)【英文标题】:Query MS Access multiple condition (where) 【发布时间】:2017-12-25 13:11:17 【问题描述】:

我有这个数据:

*周、年、数值为数字格式

我正在尝试获取过去 5 周的平均值:5,000(即 25,000/5)

到目前为止我有这个查询

x=用户输入/获取当年上周(当前周) y= 当前日期,年份

INSERT INTO RR5 ([ID],[RR5]) 
SELECT ID, ROUND((SUM(AMOUNT)/5),4) AS RR5  
FROM resultTable 
WHERE Years =" & y - 1 & " and Week > " & 52 - (x - 5) & " Group BY ID"

但是,我只能得到第 51 周和第 52 周。我需要添加附加条件来告诉编译器我需要周 > 2016 年 50 年和周

Years = " & y & " and Weeknum < " & x 

获得第 1 周第 2 周和第 3 周。

我认为我不能将这两个条件放在同一个“位置”中。我该如何解决?

解决方案:

 INSERT INTO RR5 ([ID],[RR5]) SELECT ID, ROUND((SUM(AMOUNT)/5),4) AS RR5  FROM resultTable WHERE (Years = " & Y - 1 & " and WeekNum > 52 - (5-" & x & ")) OR ( Years = " & Y & " and Weeknum <= " & x & " ) Group BY ID

只需在每个条件上添加括号,然后用 OR 连接另一个条件。

感谢您的支持,希望对遇到同样问题的人有所帮助。

【问题讨论】:

请提供完整的代码,包括任何VBA,并包括字段类型。 点作为数据还是只是一个奇特的帖子?正如其他人所说,提供更多详细信息以提供更好的帮助。 抱歉,点表示1-52的连续数据。 【参考方案1】:

您的问题根源在于您存储日期数据的方式。最好将其存储为实际日期,而不是年份和星期。但是,作为一种解决方法,您可以将现有的年份和星期转换为日期,然后在 where 子句中使用它。

WHERE (CDate("1 JAN " & Year) + (Week - 1) * 7) > (CDate("1 JAN " & y) + (x - 1) * 7)

这样做的目的是获取您拥有的每条记录并使用 CDate 函数将其转换为给定年份的 1 月 1 日。因为这些日期实际上存储为双精度数,其中 1 对应于 24 小时,所以我将添加到 1 月 1 日的日期,以找出随后一周的第一天是什么。 (Week - 1) 假设第一周从 1 月 1 日开始。

现在,您只需对用户提供的年 (y) 和周 (x) 使用相同的逻辑。查询将返回晚于用户指定日期发生的任何内容。

【讨论】:

您好 SandPiper,感谢您的意见。我也认为如果我们可以使用公历会很容易。不幸的是,这些数据来自 BW,最初是每周使用这种格式定义的(例如:1#2016,2#2016,.. 52#2016,1#2017)。 (对不起,我不是母语英语,但我想你明白了。)【参考方案2】:

你可以使用:

INSERT INTO RR5 ([ID],[RR5]) 
SELECT ID, ROUND((SUM(AMOUNT)/5),4) AS RR5 
FROM
    (SELECT TOP 5 *
    FROM resultTable 
    WHERE Years * 100 + WeekNum <= SelectedYear * 100 + SelectedWeek
    ORDER BY Years Desc, WeekNum Desc)

【讨论】:

如果他只想要最后 5 行,这将起作用。我的印象是他希望用户输入开始的年份/周并在此之后获得所有内容。在这种特殊情况下,用户想要最后 5 周。但是,如果用户想要过去 8 周怎么办? @SandPiper 确切地说,我需要开始的一周以及之后的一切。但它总是会持续 5 周,唯一改变的是本周。 我很困惑。您写道 我正在尝试获取过去 5 周的平均值 - 这就是我的解决方案所提供的。如果“当前”周既不是当前周也不是最后一周,只需过滤这个选定的年/周。请查看编辑后的答案。

以上是关于查询 MS Access 多个条件(where)的主要内容,如果未能解决你的问题,请参考以下文章

MS-Access 中的多个日期范围

MS Access SQL 多个 JOIN 和 WHERE 子句

MS-Access:SQL JOIN 和 INSERT INTO 与 WHERE 慢

返回基于多个条件 SQL、MS Access 的非不同行

MS Access 03 - 更新查询条件的一个字段中有多个“ifs”?

MS Access:具有多个条件的双循环查询以显示在表单上