根据条件在Access的SQL查询中创建日期字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据条件在Access的SQL查询中创建日期字段相关的知识,希望对你有一定的参考价值。

我是新手用户,最近才开始在Access中使用VBA。我的任务是更改复杂的数据库以反映一个月的新日期。而不是将月初作为1,我的客户希望月份从23日到22日。这将给他们一周的时间来准备处理。

我设法让大部分工作,但有以下例外。我需要根据新标准分配DT。

虽然它的开发方式远非我使用的方法。我坚持让它发挥作用。

这是SQL视图中的旧代码:

SELECT G.Part,
       G.Process,
       Sum(G.QPass2) AS QtyPass,
       Sum(G.QFail2) AS QtyFail,
       Sum(G.QNull2) AS QtyNull,
       IIf(Sum(SYtd)=0,NULL,Sum(SYtd)) AS Sprayed_Yesterday,
       Sum(G.SpMTD) AS SprayedMTD,
       G.AftMkt,
       G.DT
FROM
  (SELECT Sprayed.Part,
          Sprayed.Process,
          Sum(Sprayed.QPass) AS QPass2,
          Sum(Sprayed.QFail) AS QFail2,
          Sum(Sprayed.QNull) AS QNull2,
          Sum(IIF(Sprayed.Date_Stamp = Date()-1,Sprayed.QPass + Sprayed.QFail + Sprayed.QNull,0)) AS SYtd,
          Sum(Sprayed.Qpass + Sprayed.QFail + Sprayed.QNull) AS SpMTD,
          Sprayed.AftMkt,
          Dateserial(Year(Date_Stamp), Month(Date_Stamp), 1) AS DT
   FROM Sprayed
   GROUP BY Part,
            Process,
            AftMkt,
            Dateserial(Year(Date_Stamp), Month(Date_Stamp), 1)) AS G
GROUP BY G.Part,
         G.Process,
         G.AftMkt,
         G.DT
HAVING (((Sum([G].[QPass2])+Sum([G].[QFail2])+Sum([SYtd]))>0));
答案

用这个替换DT的公式:IIf(Day(Date_Stamp) > 22, DateSerial(Year(Date_Stamp), Month(Date_Stamp)+1, 1), DateSerial(Year(Date_Stamp), Month(Date_Stamp), 1))

另一答案

您可以简单地将Date_Stamp偏移一周:

Dateserial(Year(DateAdd("ww", 1, Date_Stamp)), Month(DateAdd("ww", 1, Date_Stamp)), 1) AS DT

以上是关于根据条件在Access的SQL查询中创建日期字段的主要内容,如果未能解决你的问题,请参考以下文章

数据库中创建一个学生表

ASP SQL中,查询条件为日期字段的一个时间段,或者日期字段为空,怎么写查询

在 MS access passthru 中创建 sql server 临时表

如何使用 SQL 在 Microsoft Access 2013 中创建查找字段?

如何在 SQL Server 中创建具有数十年的日期维度?

LINQ里如何设置查询条件的日期为昨天或者当天????