回答編集履歴
6
追記
test
CHANGED
@@ -25,3 +25,59 @@
|
|
25
25
|
```
|
26
26
|
|
27
27
|
また**full join**にしていますので、同じ行数で揃えたい場合は **inner join**として下さい。
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
追記
|
32
|
+
|
33
|
+
--
|
34
|
+
|
35
|
+
重複に関する内容が質問に追記されましたので、その内容での回答です。
|
36
|
+
|
37
|
+
tableAに関する重複排除は、
|
38
|
+
|
39
|
+
・CODE=00のものを重複無しにする
|
40
|
+
|
41
|
+
```SQL
|
42
|
+
|
43
|
+
select code, name from tableA where code='00' group by code, name
|
44
|
+
|
45
|
+
```
|
46
|
+
|
47
|
+
tableBに関する重複排除は、
|
48
|
+
|
49
|
+
・NUMBER=0000のものを重複無しにする
|
50
|
+
|
51
|
+
```SQL
|
52
|
+
|
53
|
+
select number, name from tableB where number='0000' group by number, name
|
54
|
+
|
55
|
+
```
|
56
|
+
|
57
|
+
これを横に並べて表示するのは、先の回答に上記部分を展開します。
|
58
|
+
|
59
|
+
```SQL
|
60
|
+
|
61
|
+
select ta.*, tb.*
|
62
|
+
|
63
|
+
from (
|
64
|
+
|
65
|
+
select t.*, row_number() over(order by null) as seq
|
66
|
+
|
67
|
+
from (select code, name from tableA where code='00' group by code, name) t
|
68
|
+
|
69
|
+
) ta
|
70
|
+
|
71
|
+
full join
|
72
|
+
|
73
|
+
(
|
74
|
+
|
75
|
+
select t.*, row_number() over(order by null) as seq
|
76
|
+
|
77
|
+
from (select number, name from tableB where number='0000' group by number, name) t
|
78
|
+
|
79
|
+
) tb
|
80
|
+
|
81
|
+
on ta.seq=tb.seq
|
82
|
+
|
83
|
+
```
|
5
訂正
test
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
from (select t.*, row_number() over(order by null) as seq from tableA t) ta
|
18
18
|
|
19
|
-
|
19
|
+
full join
|
20
20
|
|
21
21
|
(select t.*, row_number() over(order by null) as seq from tableB t) tb
|
22
22
|
|
@@ -24,4 +24,4 @@
|
|
24
24
|
|
25
25
|
```
|
26
26
|
|
27
|
-
また**
|
27
|
+
また**full join**にしていますので、同じ行数で揃えたい場合は **inner join**として下さい。
|
4
回答
test
CHANGED
@@ -1,75 +1,27 @@
|
|
1
|
-
分かり
|
1
|
+
重複が何を意味しているのか分かりませんので、その条件を含めずに回答します。
|
2
|
-
|
3
|
-
tableA
|
4
|
-
|
5
|
-
--
|
6
|
-
|
7
|
-
|code|NAME|
|
8
|
-
|
9
|
-
|:--|:--|
|
10
|
-
|
11
|
-
|66|あいこ|
|
12
|
-
|
13
|
-
|378|あっこ|
|
14
|
-
|
15
|
-
|00|あきこ|
|
16
|
-
|
17
|
-
|0000|あつみ|
|
18
2
|
|
19
3
|
|
20
4
|
|
21
|
-
|
5
|
+
tableAとTableBを何らかの条件で抽出したものを、単に横並びで展開させるという事だとします。
|
22
6
|
|
7
|
+
これを一度のSQLで行うには、行を揃える条件が必要になります。
|
23
8
|
|
9
|
+
これについては[ROW_NUMBER()](https://www.shift-the-oracle.com/sql/functions/row_number-practice.html)を使用して、行の番号を生成し、それを結合条件とします。
|
24
10
|
|
25
|
-
|
11
|
+
※以下は行の並びについての条件は無し(=Null)にしています。
|
26
12
|
|
13
|
+
```SQL
|
27
14
|
|
15
|
+
select ta.*, tb.*
|
28
16
|
|
29
|
-
table
|
17
|
+
from (select t.*, row_number() over(order by null) as seq from tableA t) ta
|
30
18
|
|
31
|
-
|
19
|
+
inner join
|
32
20
|
|
33
|
-
|
21
|
+
(select t.*, row_number() over(order by null) as seq from tableB t) tb
|
34
22
|
|
35
|
-
|
23
|
+
on ta.seq=tb.seq
|
36
24
|
|
37
|
-
|
25
|
+
```
|
38
26
|
|
39
|
-
|467|田中|
|
40
|
-
|
41
|
-
|000000|石橋|
|
42
|
-
|
43
|
-
|00000|まつこ|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
→ 000000、00000は重複とはみなしません。
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
期待する結果:NUMBER→000000000を抽出
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
最終形
|
56
|
-
|
57
|
-
--
|
58
|
-
|
59
|
-
|
27
|
+
また**inner join**にしていますので、それのぞれの抽出の行が異なる時については、小さい方の行分しか抽出されません。
|
60
|
-
|
61
|
-
・AとBのNAMEをそれぞれ重複無しで抽出
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
この2つを一回のSQL文で出したい
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|code_number|NAME|
|
70
|
-
|
71
|
-
|:--|:--|
|
72
|
-
|
73
|
-
|00|あきこ|
|
74
|
-
|
75
|
-
|000000|石橋|
|
3
追記
test
CHANGED
@@ -49,3 +49,27 @@
|
|
49
49
|
|
50
50
|
|
51
51
|
期待する結果:NUMBER→000000000を抽出
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
最終形
|
56
|
+
|
57
|
+
--
|
58
|
+
|
59
|
+
・AとBのそれぞれ先頭のみのCODEとNUMBERを抽出
|
60
|
+
|
61
|
+
・AとBのNAMEをそれぞれ重複無しで抽出
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
この2つを一回のSQL文で出したい
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|code_number|NAME|
|
70
|
+
|
71
|
+
|:--|:--|
|
72
|
+
|
73
|
+
|00|あきこ|
|
74
|
+
|
75
|
+
|000000|石橋|
|
2
追記
test
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
分かりずらいので、質問の内容を記述してみましたが、ルールがさっぱり分かりません。
|
2
|
+
|
1
3
|
tableA
|
2
4
|
|
3
5
|
--
|
1
推敲
test
CHANGED
@@ -38,7 +38,7 @@
|
|
38
38
|
|
39
39
|
|000000|石橋|
|
40
40
|
|
41
|
-
|0000|まつこ|
|
41
|
+
|00000|まつこ|
|
42
42
|
|
43
43
|
|
44
44
|
|