回答編集履歴

2

修正

2017/08/22 00:03

投稿

SVC34
SVC34

スコア1149

test CHANGED
@@ -14,9 +14,7 @@
14
14
 
15
15
  )
16
16
 
17
- AS(
17
+ AS (
18
-
19
- SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -6), 'YYYY/MM') FROM DUAL UNION ALL
20
18
 
21
19
  SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -5), 'YYYY/MM') FROM DUAL UNION ALL
22
20
 
@@ -100,7 +98,7 @@
100
98
 
101
99
  WHERE
102
100
 
103
- cal.ctr < 6
101
+ cal.ctr <= 5
104
102
 
105
103
  )
106
104
 

1

追記

2017/08/22 00:03

投稿

SVC34
SVC34

スコア1149

test CHANGED
@@ -1,4 +1,66 @@
1
1
  [共通表式](https://www.shift-the-oracle.com/sql/with.html)を使ってみてはいかがでしょうか。
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+ ```sql
10
+
11
+ WITH cal (
12
+
13
+ mon
14
+
15
+ )
16
+
17
+ AS(
18
+
19
+ SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -6), 'YYYY/MM') FROM DUAL UNION ALL
20
+
21
+ SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -5), 'YYYY/MM') FROM DUAL UNION ALL
22
+
23
+ SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -4), 'YYYY/MM') FROM DUAL UNION ALL
24
+
25
+ SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -3), 'YYYY/MM') FROM DUAL UNION ALL
26
+
27
+ SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -2), 'YYYY/MM') FROM DUAL UNION ALL
28
+
29
+ SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY/MM') FROM DUAL UNION ALL
30
+
31
+ SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -0), 'YYYY/MM') FROM DUAL
32
+
33
+ )
34
+
35
+ SELECT
36
+
37
+ cal.mon
38
+
39
+ ,COUNT(num) AS 合計
40
+
41
+ FROM
42
+
43
+ cal
44
+
45
+ LEFT OUTER JOIN テーブル tl
46
+
47
+ ON cal.mon = TO_CHAR(tl.date, 'YYYY/MM')
48
+
49
+ GROUP BY
50
+
51
+ cal.mon
52
+
53
+ ORDER BY
54
+
55
+ cal.mon
56
+
57
+ ;
58
+
59
+ ```
60
+
61
+
62
+
63
+ 再帰を使って記述することもできます。
2
64
 
3
65
 
4
66
 
@@ -67,3 +129,5 @@
67
129
  ;
68
130
 
69
131
  ```
132
+
133
+