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