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

回答編集履歴

5

別案追加

2019/02/18 15:57

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -22,4 +22,38 @@
22
22
  ---
23
23
  のんびり検証しながら回答を作成していたら、解決済みになっちゃいましたが、
24
24
  DJoinよりは、たぶん高速だと思います。
25
- 実データで検証した結果を出来れば教えてほしいです。
25
+ 実データで検証した結果を出来れば教えてほしいです。
26
+
27
+ 別案
28
+ ---
29
+ 上記の更新クエリは、先頭レコードから順次処理されていくということが前提になります。
30
+ いろいろ、検証してみた限りでは問題ないようですが、保証できるかといわれると断言はできないので、
31
+ DAOかADOで更新するほうが確実かも。
32
+
33
+ ```vba
34
+ Public Sub UpdateOrd()
35
+ Dim strSQL As String
36
+ strSQL = "SELECT 価格, 並び FROM T_Test " & _
37
+ "ORDER BY 日付, 商品ID, 仕入先id;"
38
+ Dim rs As DAO.Recordset
39
+ Set rs = CurrentDb.OpenRecordset(strSQL)
40
+
41
+ Dim strOrd As String, i As Long
42
+ Do Until rs.EOF
43
+ For i = 1 To 6
44
+ strOrd = strOrd & (rs!価格 \ 100)
45
+ rs.MoveNext
46
+ Next
47
+ rs.Move -6
48
+ For i = 1 To 6
49
+ rs.Edit
50
+ rs!並び = strOrd
51
+ rs.Update
52
+ rs.MoveNext
53
+ Next
54
+ strOrd = ""
55
+ Loop
56
+ rs.Close
57
+ End Sub
58
+ ```
59
+ 仕入先は1~6で100%固定、抜けはない、という前提です。

4

参考リンクの追加

2019/02/18 15:57

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -16,6 +16,8 @@
16
16
 
17
17
  [更新クエリで定義域集計関数を使わずに集計する - hatena chips](https://hatenachips.blog.fc2.com/blog-entry-350.html)
18
18
 
19
+ [複数の文字列置換をクエリで一気に実行する-改良版 - hatena chips](https://hatenachips.blog.fc2.com/blog-entry-458.html)
20
+
19
21
  追記
20
22
  ---
21
23
  のんびり検証しながら回答を作成していたら、解決済みになっちゃいましたが、

3

コード修正

2019/02/18 14:36

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -3,7 +3,7 @@
3
3
  ```sql
4
4
  UPDATE (
5
5
  SELECT T2.価格\100 AS X, T1.並び
6
- FROM T_Test AS T1 INNER JOIN TERA175064 AS T2
6
+ FROM T_Test AS T1 INNER JOIN T_Test AS T2
7
7
  ON T1.日付 = T2.日付 AND T1.商品ID = T2.商品ID
8
8
  ORDER BY T2.仕入先id
9
9
  ) AS Q1

2

コード修正

2019/02/18 14:27

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ```sql
4
4
  UPDATE (
5
- SELECT T2.価格/100 AS X, T1.並び
5
+ SELECT T2.価格\100 AS X, T1.並び
6
6
  FROM T_Test AS T1 INNER JOIN TERA175064 AS T2
7
7
  ON T1.日付 = T2.日付 AND T1.商品ID = T2.商品ID
8
8
  ORDER BY T2.仕入先id

1

追記

2019/02/18 13:40

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -14,4 +14,10 @@
14
14
 
15
15
  原理は下記で紹介している方法と同じものになります。
16
16
 
17
- [更新クエリで定義域集計関数を使わずに集計する - hatena chips](https://hatenachips.blog.fc2.com/blog-entry-350.html)
17
+ [更新クエリで定義域集計関数を使わずに集計する - hatena chips](https://hatenachips.blog.fc2.com/blog-entry-350.html)
18
+
19
+ 追記
20
+ ---
21
+ のんびり検証しながら回答を作成していたら、解決済みになっちゃいましたが、
22
+ DJoinよりは、たぶん高速だと思います。
23
+ 実データで検証した結果を出来れば教えてほしいです。