【问题标题】:SQL Access Add recordSQL Access 添加记录
【发布时间】:2017-06-29 05:19:55
【问题描述】:

我在 Access 中有一个表/查询,并希望根据日期和月数添加新记录。

这个想法是添加记录的以下月份。

例如,在我的表格中,我的 6 月值为 5,它应该有效期为 3 个月,因此我想为 7 月添加一行,为 8 月添加一行,值为 5。

现有表

Strg     NbMonths       Value      Date    
Abc      3              5          6/1/2017 
Abc      3              8          12/1/2017 
Rtg      1              2          7/10/2017

我想要

Strg     NbMonths       Value      Date 
Abc      3              5          6/1/2017
Abc      3              5          7/1/2017
Abc      3              5          8/1/2017
Abc      3              8          12/1/2017
Abc      3              8          1/1/2018
Abc      3              8          2/1/2018
Rtg      1              2          7/10/2017

我在 Access 2010 中使用 SQL。 是否可以在 SQL 查询中执行此操作?

【问题讨论】:

  • 你表中的PK是什么?到目前为止,您尝试了什么?为什么不能直接添加?

标签: sql ms-access


【解决方案1】:

MS Access 缺乏执行此操作的大多数明显方法。这是使用union all的显式方式:

select t.strg, t.nbMonths, t.value, t.date
from t
union all
select t.strg, t.nbMonths, t.value, dateadd(m, 1, t.date)
from t
where t.nbMonths >= 2
union all
select t.strg, t.nbMonths, t.value, dateadd(m, 2, t.date)
from t
where t.nbMonths >= 3
union all
select t.strg, t.nbMonths, t.value, dateadd(m, 3, t.date)
from t
where t.nbMonths >= 4;

对于每个要扩展的值,您需要一个单独的子查询。

【讨论】:

    【解决方案2】:

    您可以为此创建一个笛卡尔查询:

    SELECT DISTINCT 
        T.Strg,
        T.NbMonths,
        T.Value,
        DateAdd("m", Abs([Uno].[id] Mod 10) , T.[Date]) As [Date]
    FROM 
        TableStrg As T,
        MSysObjects AS Uno
    WHERE 
        Abs([Uno].[id] Mod 10) < T.NbMonths
    

    输出:

    Strg NbMonths Value Date
    Abc  3        5     2017-06-01
    Abc  3        5     2017-07-01
    Abc  3        5     2017-08-01
    Abc  3        8     2017-12-01
    Abc  3        8     2018-01-01
    Abc  3        8     2018-02-01
    Rtg  1        2     2017-07-10
    

    【讨论】:

    • 好主意,但为什么要使用 MSysObjects
    • @Parfait:因为它一直都在!因此查询将立即生效。你可能不喜欢这样,有些人不喜欢,尽管 MSysObjects 从 V1.0 开始就已经存在并且将继续存在。如果是这样,您可以跳过模数内容并用一个简单的表格替换,其中一个字段包含从 0 到某物的序列号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多