質問するログイン新規登録

回答編集履歴

1

Chooseと月度マスタを使用した方法についても動作を確認できました。

2021/07/19 09:25

投稿

t.mihiro
t.mihiro

スコア0

answer CHANGED
@@ -20,4 +20,46 @@
20
20
  省略
21
21
 
22
22
  WHERE NOT EXISTS (SELECT * FROM Newテーブル WHERE (Newテーブル.FctID = base.FctID AND Newテーブル.月度 = base.月度) );
23
+ ```
24
+
25
+ [追記]
26
+
27
+ ご提示頂きましたChooseを使用した方法もRIGHT JOINと共に動作したので、
28
+ 追加・更新が1つのクエリ対応できました。やはりRIGHT JOINに関しては記述に問題があったようです。
29
+ 都度全部のデータを更新すると重たいので、今後は更新日時からデータを絞り込んで
30
+ 実行しようかと思っております。
31
+ おかげさまでかなりシンプルなSQLになり大変助かりました。
32
+ 皆様、ありがとうございました。
33
+
34
+ ```SQL
35
+ UPDATE Newテーブル AS T1
36
+ RIGHT JOIN (
37
+ SELECT [Oldテーブル].案件名,
38
+ [Oldテーブル].ID AS FctID,
39
+ [Oldテーブル].[エリア],
40
+ [Oldテーブル].年度,
41
+ [Oldテーブル].支社 AS 所課,
42
+ [Oldテーブル].[クライアント名],
43
+ [Oldテーブル].商材,
44
+ [Oldテーブル].担当,
45
+ 月度マスタ.月度,
46
+ Choose(月度マスタ.[月度ID], [3月Fct・売上], [4月Fct・売上], [5月Fct・売上], [6月Fct・売上], [7月Fct・売上], [8月Fct・売上], [9月Fct・売上], [10月Fct・売上], [11月Fct・売上], [12月Fct・売上], [1月Fct・売上], [2月Fct・売上] ) AS 売上予測,
47
+ Choose(月度マスタ.[月度ID], 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2 ) AS 月,
48
+ [Oldテーブル].[データ更新日時] AS 更新日時
49
+ FROM Oldテーブル, 月度マスタ ORDER BY [Oldテーブル].ID) AS base
50
+ ON (T1.月度 = base.月度) AND (T1.FctID = base.FctID)
51
+ SET
52
+ T1.FctID = base.FctID,
53
+ T1.年度 = base.年度,
54
+ T1.月度 = base.月度,
55
+ T1.月 = base.月,
56
+ T1.案件名 = base.案件名,
57
+ T1.クライアント名 = base.[クライアント名],
58
+ T1.エリア = base.[エリア],
59
+ T1.商材 = base.商材,
60
+ T1.担当 = base.担当,
61
+ T1.所課 = base.所課,
62
+ T1.売上予測 = base.売上予測,
63
+ T1.更新日時 = base.更新日時
64
+ ;
23
65
  ```