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

質問編集履歴

3

追記カラム名修正

2019/02/22 02:26

投稿

inu_inu
inu_inu

スコア19

title CHANGED
File without changes
body CHANGED
@@ -75,7 +75,7 @@
75
75
  , sum(case tbl1.Number1 when 1 then 1 else 0 end) as countOf_1
76
76
  , sum(case tbl1.Number1 when 2 then 1 else 0 end) as countOf_2
77
77
  , sum(case tbl1.Number1 when 3 then 1 else 0 end) as countOf_3
78
- , sum(case tbl2.Number2 when 12 then 1 else 0 end) as countOf_4
78
+ , sum(case tbl2.Number2 when 12 then 1 else 0 end) as countOf_12
79
79
  from TABLE1 tbl1 full join TABLE2 tbl2
80
80
  on tbl1.ID = tbl2.ID
81
81
  and tbl1.Number1 in (1,2,3)

2

例テーブル修正

2019/02/22 02:26

投稿

inu_inu
inu_inu

スコア19

title CHANGED
File without changes
body CHANGED
@@ -4,32 +4,33 @@
4
4
  やりたいこと
5
5
  ---
6
6
  下記①②のような表があったとき、IDごとに特定のNumberのカウントを取得するビュー③を作成したいです。
7
- ※①のテーブルではNumber=1 or 2, ②のテーブルではNumber=3だけカウント
7
+ ※①のテーブルではNumber=1~3, ②のテーブルではNumber=12だけカウント
8
8
  ①元テーブル1
9
- |ID|Number|
9
+ |ID|Number1|
10
10
  |:--|:--:|
11
11
  |田中|1|
12
12
  |高橋|2|
13
+ |高橋|4|
13
14
  |斉藤|1|
14
- |斉藤|2|
15
- |斉藤|2|
16
15
  |斉藤|3|
16
+ |斉藤|3|
17
+ |斉藤|12|
17
18
 
18
19
  ②元テーブル2
19
- |ID|Number|
20
+ |ID|Number2|
20
21
  |:--|:--:|
21
22
  |田中|3|
22
23
  |林|2|
23
- |林|3|
24
+ |林|12|
24
- |林|3|
25
+ |林|12|
25
26
 
26
27
  ③作成したいビュー
27
- |ID|countOf_1|countOf_2|countOf_3|
28
+ |ID|countOf_1|countOf_2|countOf_3|countOf_12|
28
- |:--|--:|--:|--:|
29
+ |:--|--:|--:|--:|--:|
29
- |田中|1|null|1|
30
+ |田中|1|0|0|0|
30
- |高橋|null|1|null|
31
+ |高橋|0|1|0|0|
31
- |斉藤|1|2|null|
32
+ |斉藤|1|0|2|0|
32
- |林|null|null|2|
33
+ |林|0|0|0|2|
33
34
 
34
35
  試したこと
35
36
  ---

1

提示例誤り

2019/02/22 02:23

投稿

inu_inu
inu_inu

スコア19

title CHANGED
File without changes
body CHANGED
@@ -62,4 +62,23 @@
62
62
 
63
63
  また方法2だと、テーブル1から取得した結果は一つの表にまとめられましたが、テーブル2から取得した結果を結合することができませんでした。
64
64
 
65
- ご教授のほど、よろしくお願いします。
65
+ ご教授のほど、よろしくお願いします。
66
+ 追記
67
+ ---
68
+ 正しい例を提示していませんでした。申し訳ございません。
69
+ 元テーブル1と元テーブル2のカラム"Number"は実際には違うカラム名となります。
70
+ またyambejp様、sazi様のご回答を参考に実行すると結合された表は作成されるのですが、countof_1~4のsum結果が実際と異なってしまいました。
71
+ コードを記載します(※また実際と異なるといけないため、条件など実際の環境に合わせたコードを載せています)
72
+ ```SQL
73
+ select coalesce(tbl1.ID, tbl2.ID) as ID
74
+ , sum(case tbl1.Number1 when 1 then 1 else 0 end) as countOf_1
75
+ , sum(case tbl1.Number1 when 2 then 1 else 0 end) as countOf_2
76
+ , sum(case tbl1.Number1 when 3 then 1 else 0 end) as countOf_3
77
+ , sum(case tbl2.Number2 when 12 then 1 else 0 end) as countOf_4
78
+ from TABLE1 tbl1 full join TABLE2 tbl2
79
+ on tbl1.ID = tbl2.ID
80
+ and tbl1.Number1 in (1,2,3)
81
+ and tbl2.Number2 = 12
82
+ group by coalesce(tbl1.ID, tbl2.ID)
83
+ order by coalesce(tbl1.ID, tbl2.ID);
84
+ ```