回答編集履歴
1
「回答への修正依頼・コメント」に対して、回答を追記した。
answer
CHANGED
@@ -29,4 +29,44 @@
|
|
29
29
|
SELECT ROW_NUMBER() OVER (ORDER BY root, lvl, code) seq, lvl, code
|
30
30
|
FROM R
|
31
31
|
ORDER BY seq
|
32
|
+
```
|
33
|
+
|
34
|
+
---
|
35
|
+
**2023-10-05 20:05追記**
|
36
|
+
|
37
|
+
>表示順だけをtest01直下のseq順にならないでしょうか? 申し訳ございません。
|
38
|
+
|
39
|
+
>seqはデータに持っていないと言っていたのですが 持っていました。
|
40
|
+
|
41
|
+
テーブル定義とサンプルデータは次のようになっていたということですかね?
|
42
|
+
|
43
|
+
```SQL
|
44
|
+
CREATE TABLE CSM070STRC (master VARCHAR(6), child VARCHAR(6), seq INT);
|
45
|
+
INSERT INTO CSM070STRC VALUES ('test01', '8387' , 1 );
|
46
|
+
INSERT INTO CSM070STRC VALUES ('8387' , '8388' , 2 );
|
47
|
+
INSERT INTO CSM070STRC VALUES ('8387' , 'A0752', 2 );
|
48
|
+
INSERT INTO CSM070STRC VALUES ('test01', '8426' , 2 );
|
49
|
+
INSERT INTO CSM070STRC VALUES ('8426' , '5049' , 7 );
|
50
|
+
INSERT INTO CSM070STRC VALUES ('8426' , '5050' , 8 );
|
51
|
+
INSERT INTO CSM070STRC VALUES ('8426' , '4132' , 9 );
|
52
|
+
INSERT INTO CSM070STRC VALUES ('8426' , '1271' , 10);
|
53
|
+
INSERT INTO CSM070STRC VALUES ('8426' , '4248' , 11);
|
54
|
+
INSERT INTO CSM070STRC VALUES ('test01', '8392' , 3 );
|
55
|
+
INSERT INTO CSM070STRC VALUES ('8392' , '8393' , 6 );
|
56
|
+
INSERT INTO CSM070STRC VALUES ('8392' , 'A0752', 7 );
|
57
|
+
```
|
58
|
+
|
59
|
+
必要な結果を求めるSQLは以下の様になると思います。
|
60
|
+
|
61
|
+
```SQL
|
62
|
+
WITH R (root_seq, code, seq, lvl) AS (
|
63
|
+
SELECT seq, child, seq, 1 FROM CSM070STRC WHERE master = 'test01'
|
64
|
+
UNION ALL
|
65
|
+
SELECT R.root_seq, C.child, C.seq, R.lvl+1
|
66
|
+
FROM R
|
67
|
+
JOIN CSM070STRC C ON R.code = C.master
|
68
|
+
)
|
69
|
+
SELECT ROW_NUMBER() OVER (ORDER BY root_seq, lvl, seq) 行, lvl, code
|
70
|
+
FROM R
|
71
|
+
ORDER BY 行
|
32
72
|
```
|