質問編集履歴

3

タイトルの変更

2019/08/03 17:35

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- SQLの空振りについて
1
+ SQLのCASE文のネストについて
test CHANGED
File without changes

2

細かい質問に切り替えました。

2019/08/03 17:34

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,50 +1,30 @@
1
- SQL文が空振りしています。
1
+ postgres sqlを書いています。
2
+
3
+ どこまでなら構文が通るかを試したところ、以下の構文で引っ掛かりました。
4
+
5
+ A,Bの2テーブルを跨いでCASE文を作成していますが、以下のCASE文が上手く通りません。
6
+
7
+ CASE文のネストの仕方は間違っていますでしょうか。
2
8
 
3
9
 
4
10
 
5
- 以下に記載しているのはSQLの途中からの文からなのでLEFT OUTER JOINから記載していま。。
11
+ 時間都合でcreate tableなど用意できのですが、
12
+
13
+ 目視で判断して下さる方のみお返事をお願い致します。
6
14
 
7
15
 
8
16
 
17
+ ```postgres sql
9
18
 
10
-
11
- ```
12
-
13
- エラーは出ないのですが、SQLが空振りしており、テーブルにデータが入りません。
14
-
15
- 構文的におかしなところがあれば教えて頂けますでしょうか。
16
-
17
- ※構文がおかしければエラーがでるかもしれませんが・・・
18
-
19
- ```
20
-
21
- ```ここに言語を入力
22
-
23
-
24
-
25
- LEFT OUTER JOIN
26
-
27
- $schema.{st_master} tt
28
-
29
- ON sta.company_code = tt.corporation_code
30
-
31
- AND sta.store_code = tt.store_code
32
-
33
- AND tt.year_month =
34
-
35
- (CASE WHEN (LENGTH(sta.floor_increase_date) = 0)
19
+ (CASE WHEN (LENGTH(A.date1) = 0) AND (LENGTH(B.date1) = 0) THEN A.date2
36
-
37
- AND (LENGTH(org.open_date) = 0) THEN left(sta.open_date, 4) + (substring(sta.open_date, 6, 2))
38
20
 
39
21
  ELSE
40
22
 
41
- (CASE WHEN (LENGTH(sta.floor_increase_date) = 0) AND (LENGTH(org.open_date) > 0) THEN TO_CHAR(org.open_date, 'yyyymm')
23
+ (CASE WHEN (LENGTH(A.date1) = 0) AND (LENGTH(B.date1) > 0) THEN B.date1
42
24
 
43
25
  ELSE
44
26
 
45
- (CASE WHEN LENGTH(sta.floor_increase_date) > 0 THEN
27
+ (CASE WHEN LENGTH(A.date1) > 0 THEN A.date1
46
-
47
- left(sta.floor_increase_date, 4) + (substring(sta.floor_increase_date, 6, 2))
48
28
 
49
29
  END)
50
30
 
@@ -52,14 +32,18 @@
52
32
 
53
33
  END)
54
34
 
35
+ ※Aテーブルのdate1のデータとBテーブルのdate1のデータのlengthが0だったら、
55
36
 
37
+  Aテーブルのdate2のデータがinsertされる。
38
+
39
+  上記でない場合、
40
+
41
+  Aテーブルのdate1のデータのlengthが0で、Bテーブルのdate1のデータのlengthが0以上あれば、
42
+
43
+  Bテーブルのdate1のデータがinsertされる。
44
+
45
+  上記でない場合、
46
+
47
+  Aテーブルのdate1のデータのlengthが0以上あれば、Aテーブルのdate1のデータがinsertされる。
56
48
 
57
49
  ```
58
-
59
-
60
-
61
- ### 補足情報(FW/ツールのバージョンなど)
62
-
63
-
64
-
65
- Postgres sqlです

1

<CODE>で書き直しました

2019/08/03 17:09

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
 
4
4
 
5
- 以下に記載しているのはSQLの途中からの文です。
5
+ 以下に記載しているのはSQLの途中からの文からなのLEFT OUTER JOINから記載しています。
6
6
 
7
- ### 発生している問題・エラーメッセージ
7
+
8
8
 
9
9
 
10
10
 
@@ -18,9 +18,7 @@
18
18
 
19
19
  ```
20
20
 
21
-
22
-
23
- ### 該当のソースコード
21
+ ```ここに言語を入力
24
22
 
25
23
 
26
24
 
@@ -36,23 +34,27 @@
36
34
 
37
35
  (CASE WHEN (LENGTH(sta.floor_increase_date) = 0)
38
36
 
39
- AND (LENGTH(org.open_date) = 0) THEN                        left(sta.open_date, 4) + (substring(sta.open_date, 6, 2))
37
+ AND (LENGTH(org.open_date) = 0) THEN left(sta.open_date, 4) + (substring(sta.open_date, 6, 2))
40
38
 
41
- ELSE
39
+ ELSE
42
40
 
43
- (CASE WHEN (LENGTH(sta.floor_increase_date) = 0) AND (LENGTH(org.open_date) > 0) THEN TO_CHAR(org.open_date, 'yyyymm')
41
+ (CASE WHEN (LENGTH(sta.floor_increase_date) = 0) AND (LENGTH(org.open_date) > 0) THEN TO_CHAR(org.open_date, 'yyyymm')
44
42
 
45
- ELSE
43
+ ELSE
46
44
 
47
- (CASE WHEN LENGTH(sta.floor_increase_date) > 0 THEN
45
+ (CASE WHEN LENGTH(sta.floor_increase_date) > 0 THEN
48
46
 
49
47
  left(sta.floor_increase_date, 4) + (substring(sta.floor_increase_date, 6, 2))
50
48
 
51
- END)
49
+ END)
52
50
 
53
- END)
51
+ END)
54
52
 
55
- END)
53
+ END)
54
+
55
+
56
+
57
+ ```
56
58
 
57
59
 
58
60