2017-06-28 12 views
0

Accessにテーブル/クエリがあり、日付と月数に基づいて新しいレコードを追加したいと考えています。SQLアクセスレコードを追加する

考え方は、次の月のレコードを追加することです。既存の値を持つたとえば

ので、私は7月と1ライン分の1行を追加したいと思い、私のテーブルには、私は6月に値5を持って、それが3ヶ月間有効である必要があり8月は5

私は、私がアクセス2010 にSQLを使用しています

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 

がしたいテーブル

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

です-ことが可能SQLクエリでそれを行うには?

+0

テーブル内のPKは何ですか?これまでに何を試しましたか?なぜそれを追加できないのですか? – Sami

答えて

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; 

あなたはに拡大したい値ごとに個別のサブクエリを必要としています。

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 
+0

良いアイデアだが、なぜ* MSysObjects *ですか? – Parfait

+0

@パルフェット:いつもそこにいるから!したがって、クエリはすぐに機能します。あなたはそれを気に入らないかもしれませんし、そうでない人もいます。たとえMSysObjectsがV1.0からそこにいても残っていても残っています。そうであれば、モジュラスの項目をスキップして、1つのフィールドが0から何かまでの連続した数字を持つ単純なテーブルに置き換えることができます。 – Gustav

関連する問題