回答編集履歴

1

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

2021/07/19 09:25

投稿

t.mihiro
t.mihiro

スコア0

test CHANGED
@@ -43,3 +43,87 @@
43
43
  WHERE NOT EXISTS (SELECT * FROM Newテーブル WHERE (Newテーブル.FctID = base.FctID AND Newテーブル.月度 = base.月度) );
44
44
 
45
45
  ```
46
+
47
+
48
+
49
+ [追記]
50
+
51
+
52
+
53
+ ご提示頂きましたChooseを使用した方法もRIGHT JOINと共に動作したので、
54
+
55
+ 追加・更新が1つのクエリ対応できました。やはりRIGHT JOINに関しては記述に問題があったようです。
56
+
57
+ 都度全部のデータを更新すると重たいので、今後は更新日時からデータを絞り込んで
58
+
59
+ 実行しようかと思っております。
60
+
61
+ おかげさまでかなりシンプルなSQLになり大変助かりました。
62
+
63
+ 皆様、ありがとうございました。
64
+
65
+
66
+
67
+ ```SQL
68
+
69
+ UPDATE Newテーブル AS T1
70
+
71
+ RIGHT JOIN (
72
+
73
+ SELECT [Oldテーブル].案件名,
74
+
75
+ [Oldテーブル].ID AS FctID,
76
+
77
+ [Oldテーブル].[エリア],
78
+
79
+ [Oldテーブル].年度,
80
+
81
+ [Oldテーブル].支社 AS 所課,
82
+
83
+ [Oldテーブル].[クライアント名],
84
+
85
+ [Oldテーブル].商材,
86
+
87
+ [Oldテーブル].担当,
88
+
89
+ 月度マスタ.月度,
90
+
91
+ 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 売上予測,
92
+
93
+ Choose(月度マスタ.[月度ID], 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2 ) AS 月,
94
+
95
+ [Oldテーブル].[データ更新日時] AS 更新日時
96
+
97
+ FROM Oldテーブル, 月度マスタ ORDER BY [Oldテーブル].ID) AS base
98
+
99
+ ON (T1.月度 = base.月度) AND (T1.FctID = base.FctID)
100
+
101
+ SET
102
+
103
+ T1.FctID = base.FctID,
104
+
105
+ T1.年度 = base.年度,
106
+
107
+ T1.月度 = base.月度,
108
+
109
+ T1.月 = base.月,
110
+
111
+ T1.案件名 = base.案件名,
112
+
113
+ T1.クライアント名 = base.[クライアント名],
114
+
115
+ T1.エリア = base.[エリア],
116
+
117
+ T1.商材 = base.商材,
118
+
119
+ T1.担当 = base.担当,
120
+
121
+ T1.所課 = base.所課,
122
+
123
+ T1.売上予測 = base.売上予測,
124
+
125
+ T1.更新日時 = base.更新日時
126
+
127
+ ;
128
+
129
+ ```