回答編集履歴

6

追記

2021/03/24 02:36

投稿

sazi
sazi

スコア25327

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

訂正

2021/03/24 02:36

投稿

sazi
sazi

スコア25327

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
- inner join
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
- また**inner join**にしていますので、それのぞれの抽出のが異なる時については、小さい方の行分しか抽出されません
27
+ また**full join**にしていますので、同じ数で揃えた場合は **inner join**としさい。

4

回答

2021/03/18 00:49

投稿

sazi
sazi

スコア25327

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
- → 000000は重複カウントしません
5
+ tableATableBを何らかの条件で抽出したものを、単横並びで展開させるという事だとしま
22
6
 
7
+ これを一度のSQLで行うには、行を揃える条件が必要になります。
23
8
 
9
+ これについては[ROW_NUMBER()](https://www.shift-the-oracle.com/sql/functions/row_number-practice.html)を使用して、行の番号を生成し、それを結合条件とします。
24
10
 
25
- 期待る結果:CODE→00 を抽出
11
+ ※以下は行の並びについての条件は無し(=Null)にしていま
26
12
 
13
+ ```SQL
27
14
 
15
+ select ta.*, tb.*
28
16
 
29
- tableB
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
- |number|NAME|
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
- |186884|マツコ|
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
- ・AとBのそれぞれ先頭CODEとNUMBERを抽出
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

追記

2021/03/18 00:45

投稿

sazi
sazi

スコア25327

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

追記

2021/03/17 11:34

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -1,3 +1,5 @@
1
+ 分かりずらいので、質問の内容を記述してみましたが、ルールがさっぱり分かりません。
2
+
1
3
  tableA
2
4
 
3
5
  --

1

推敲

2021/03/17 11:28

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  |000000|石橋|
40
40
 
41
- |0000|まつこ|
41
+ |00000|まつこ|
42
42
 
43
43
 
44
44