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

回答編集履歴

5

コード修正

2016/08/04 19:36

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -13,38 +13,35 @@
13
13
  25 z
14
14
 
15
15
  PostgreSQLで以下の感じのクエリを書くと実現出来そうなんですが・・・
16
-
16
+ ** ※クエリが盛大に間違ってたので修正 **
17
-
18
17
  ```SQL
19
- UPDATE table
18
+ UPDATE table
20
19
  SET
21
20
  ID1 = CONCAT(SUBSTR(ID1, 1, 1), T4.LETTER, SUBSTR(ID1, 3))
22
21
  FROM
23
22
  (
24
23
  SELECT
25
- T3.*
24
+ T2.*
25
+ , T3.LETTER
26
26
  FROM
27
27
  (
28
28
  SELECT
29
29
  T1.MIN_ID
30
- , T1.UPD_KEY
30
+ , T1.UPD_KEY
31
- , T2.LETTER
31
+ , ROW_NUMBER() OVER (ORDER BY MIN_ID) - 1 AS ROW_NUM
32
32
  FROM
33
33
  (
34
34
  SELECT
35
35
  MIN(ID1) AS MIN_ID
36
- , ID2 AS UPD_KEY
36
+ , ID2 AS UPD_KEY
37
- , ROW_NUMBER() OVER (ORDER BY ID2) - 1 AS ROW_NUM
38
37
  FROM
39
- table
38
+ table
40
39
  GROUP BY
41
40
  ID2
42
- ORDER BY
43
- MIN_ID
44
- ) T1
41
+ ) T1
42
+ ) T2
45
- INNER JOIN LETTERS T2
43
+ INNER JOIN LETTERS T3
46
- ON MOD(T1.ROW_NUM, 25) = T2.SEQNO
44
+ ON MOD(T2.ROW_NUM, 25) = T3.SEQNO
47
- ) T3
48
45
  ) T4
49
46
  WHERE
50
47
  ID2 = T4.UPD_KEY

4

コード修正

2016/08/04 19:36

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -27,13 +27,13 @@
27
27
  (
28
28
  SELECT
29
29
  T1.MIN_ID
30
- , T1.ID2 AS UPD_KEY
30
+ , T1.UPD_KEY
31
31
  , T2.LETTER
32
32
  FROM
33
33
  (
34
34
  SELECT
35
- MIN(ID1) MIN_ID
35
+ MIN(ID1) AS MIN_ID
36
- , ID2
36
+ , ID2 AS UPD_KEY
37
37
  , ROW_NUMBER() OVER (ORDER BY ID2) - 1 AS ROW_NUM
38
38
  FROM
39
39
  table

3

誤字修正

2016/08/04 19:08

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -56,5 +56,5 @@
56
56
 
57
57
 
58
58
  **・追記**
59
- MOD(MOD(T1.ROW_NUM, 25))と文字列変換テーブルの連番で結合かけてるので、
59
+ MOD(T1.ROW_NUM, 25)と文字列変換テーブルの連番で結合かけてるので、
60
60
  zまで採番が終わるとaから循環し直す仕様にしてます。

2

コード変更

2016/08/04 19:01

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -34,7 +34,7 @@
34
34
  SELECT
35
35
  MIN(ID1) MIN_ID
36
36
  , ID2
37
- , row_number() OVER (ORDER BY ID2) - 1 AS ROW_NUM
37
+ , ROW_NUMBER() OVER (ORDER BY ID2) - 1 AS ROW_NUM
38
38
  FROM
39
39
  table
40
40
  GROUP BY

1

追記

2016/08/04 18:52

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -43,7 +43,7 @@
43
43
  MIN_ID
44
44
  ) T1
45
45
  INNER JOIN LETTERS T2
46
- ON mod(T1.ROW_NUM, 25) = T2.SEQNO
46
+ ON MOD(T1.ROW_NUM, 25) = T2.SEQNO
47
47
  ) T3
48
48
  ) T4
49
49
  WHERE
@@ -51,4 +51,10 @@
51
51
  ```
52
52
 
53
53
  これをMySQL風に書き直そうと思いましたが力尽きました・・・
54
- (MySQLはROW_NUMBER分析関数はサポートしてないのね・・・orz)
54
+ (MySQLはROW_NUMBER分析関数はサポートしてないのね・・・orz)
55
+
56
+
57
+
58
+ **・追記**
59
+ MOD(MOD(T1.ROW_NUM, 25))と文字列変換テーブルの連番で結合かけてるので、
60
+ zまで採番が終わるとaから循環し直す仕様にしてます。