SQL Access添加记录

时间:2017-06-28 19:37:38

标签: sql ms-access

我在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查询中执行此操作?

2 个答案:

答案 0 :(得分:0)

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;

您需要为要扩展到的每个值使用单独的子查询。

答案 1 :(得分:0)

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

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