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

回答編集履歴

2

説明追記

2021/07/17 07:03

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -12,11 +12,9 @@
12
12
  | 3 | 6月 |
13
13
 
14
14
 
15
- 追加クエリは下記のSQLになります。
15
+ 下記のSQLでユニオンクエリと同じ結果になります。SQLはかなりシンプルになります。(テーブルは一つ増えますが)
16
16
 
17
17
  ```sql
18
- INSERT INTO
19
- Newテーブル (OLdID, 案件名, 年度, 月度, 売上)
20
18
  SELECT
21
19
  Oldテーブル.ID AS OLdID,
22
20
  Oldテーブル.案件名,
@@ -30,4 +28,27 @@
30
28
  Oldテーブル.年度=2021;
31
29
  ```
32
30
 
33
- 6月度までのSQLですが、同様にして3月度まで増やせばいいでしょう。
31
+ 6月度までのSQLですが、同様にして3月度まで増やせばいいでしょう。
32
+
33
+ ---
34
+
35
+ > 本来は、UpdateとRIGHT JOINで更新・追加を同時にしたいと思っていたのですが、
36
+ 新しいデータベース側のSQL命令でRIGHT JOINが用意されてなく、
37
+ LEFT JOINしか対応しないために、更新しかできず追記がどうしても出来なかったため、
38
+ 今は更新と追記を別々のクエリで作ってみています。
39
+
40
+ 上記のSQLをQ1と名前をつけて保存して、下記のようなSQLで更新と追加が同時にできます。
41
+
42
+ ```sql
43
+ UPDATE
44
+ Q1 LEFT JOIN Newテーブル
45
+ ON Q1.OLdID = Newテーブル.OldID
46
+ SET
47
+ Newテーブル.OldID = [Q1].[OLdID],
48
+ Newテーブル.案件名 = [Q1].[案件名],
49
+ Newテーブル.年度 = [Q1].[年度],
50
+ Newテーブル.月度 = [Q1].[月度],
51
+ Newテーブル.売上 = [Q1].[売上];
52
+ ```
53
+
54
+ クエリが2つになるのを避けたいなら、Q1をサブクエリにすれば一つのクエリにできます。

1

コード修正

2021/07/17 07:03

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -25,7 +25,9 @@
25
25
  Choose([月度ID], [4月度売上], [5月度売上], [6月度売上]) AS 売上
26
26
  FROM
27
27
  Oldテーブル,
28
- 月度マスタ;
28
+ 月度マスタ
29
+ WHERE
30
+ Oldテーブル.年度=2021;
29
31
  ```
30
32
 
31
33
  6月度までのSQLですが、同様にして3月度まで増やせばいいでしょう。