首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询子表中无记录的“周”内多条记录

查询子表中无记录的“周”内多条记录
EN

Stack Overflow用户
提问于 2014-07-01 18:31:34
回答 1查看 138关注 0票数 0

我正在尝试确定如何使用Access 2013处理此查询的最佳方法。我有一个客户端表,其中包含以下内容:

代码语言:javascript
复制
clientID    fName    lName    admissionDate    dischargeDate
1            John      Doe        05/06/2014       06/27/2014
2            Jane      Doe        04/24/2014       05/15/2014
3            Steven    Smith      05/15/2014       NULL/Empty
4            Chris     Davis      06/12/2014       NULL/Empty

然后有一个WeeklyProgressNotes表,用于负责审计客户图表的人员。它不包含实际的周进度备注,它只包含一个是/否字段和一个日期字段,用于表示周进度备注的完成日期。如下所示:

代码语言:javascript
复制
noteID     completed     dateCompleted     clientID
1            yes              05/08/2014          1
2            yes              05/14/2014          1
3            yes              04/25/2014          2

我正在创建一个表单,审计师可以打开它来确定她需要为每个客户检查哪些周,以查看他们是否在那一周完成了每周进度笔记。周运行Mon - Sun,如果她还没有检查和确认该周,则WeeklyProgressNotes表中将没有记录。所以表单基本上看起来像这样:

代码语言:javascript
复制
fName    lName       week              completed        date      clientID(hidden)
John      Doe       5/19/14-5/25/14    Checkbox          Null        1
John      Doe       5/26/14-6/1/14     Checkbox          Null        1
John      Doe       6/2/14-6/8/14      Checkbox          Null        1
John      Doe       6/9/14-6/15/14     Checkbox          Null        1
John      Doe       6/16/14-6/22/14    Checkbox          Null        1
John      Doe       6/23/14-6/29/14    Checkbox          Null        1
Jane      Doe       4/28/14-5/4/14     Checkbox          Null        2

以此类推......

我曾经考虑过创建一条SQL语句来选择所有客户端,然后创建一个函数来确定他们在特定周内的入院日期和出院日期,然后使用另一条SQL语句创建一个循环,该循环包含所有周的BETWEEN子句,并确定WeeklyProgressNotes表中是否有条目。如果不是,我会显示出上面的信息。我不确定是否有一种更简单,搜索密集度更低的方法。也许是一个SQL查询,它可以对一些循环进行裁剪。

EN

回答 1

Stack Overflow用户

发布于 2014-07-01 19:38:12

我解决这个问题的方法是创建一个新表。由于您希望将添加和释放日期之间的日期时间拆分为多行,因此我认为最好将客户端拆分为表中的多个记录。

下面的代码基于基本客户端表创建一个记录集。之后,它会创建您的临时表(由于时间不足,这里只填充了2个字段)。当您循环遍历原始表的记录集时,您将保留每一行,并将添加和释放之间的时间分成一周一块。

然后,一旦您填充了表,就可以很容易地基于该表和带有每周进度备注的表创建一个简单的查询。

我希望我的解释是足够的,请注意,我还没有测试代码。它很可能需要代表你进行一些调整。如果我手头有更多的时间,也许我可以稍后再看一下。

代码语言:javascript
复制
Sub showrecords()
Dim gvweek As String
Dim rs As Recordset
Dim rstemp As Recordset
Dim tdfNew As TableDef

gvweek = ""

Set tdfNew = CurrentDb.CreateTableDef("Tbl_Temporary")
With tdfNew
    .Fields.Append .CreateField("fName", dbText)
    .Fields.Append .CreateField("week", dbText)
End With

Set rs = CurrentDb.OpenRecordset("Clients")
With rs
    Do Until .EOF
        .MoveFirst
            Do Until DateAdd("dd", 7, ![admissionDate]) > ![dischargeDate]
                gvweek = ![admissionDate] & " - " & DateAdd("dd", 7, ![admissionDate])
                    Set rstemp = CurrentDb.OpenRecordset("Tbl_Temporary")
                        With rstemp
                            .AddNew
                            ![fName] = rs![fName]
                            ![week] = gvweek
                            .Update
                        End With
                    rstemp.Close
                    Set rstemp = Nothing
            Loop
        gvweek = ""
        .MoveNext
    Loop
End With

rs.Close
Set rs = Nothing
DoCmd.DeleteObject acTable, "Tbl_Temporary"
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24508039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档