質問編集履歴
3
タイトルの変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
SQLの
|
1
|
+
SQLのCASE文のネストについて
|
test
CHANGED
File without changes
|
2
細かい質問に切り替えました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,50 +1,30 @@
|
|
1
|
-
|
1
|
+
postgres sqlを書いています。
|
2
|
+
|
3
|
+
どこまでなら構文が通るかを試したところ、以下の構文で引っ掛かりました。
|
4
|
+
|
5
|
+
A,Bの2テーブルを跨いでCASE文を作成していますが、以下のCASE文が上手く通りません。
|
6
|
+
|
7
|
+
CASE文のネストの仕方は間違っていますでしょうか。
|
2
8
|
|
3
9
|
|
4
10
|
|
5
|
-
|
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(
|
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(
|
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(
|
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>で書き直しました
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
|
37
|
+
AND (LENGTH(org.open_date) = 0) THEN left(sta.open_date, 4) + (substring(sta.open_date, 6, 2))
|
40
38
|
|
41
|
-
|
39
|
+
ELSE
|
42
40
|
|
43
|
-
|
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
|
-
|
43
|
+
ELSE
|
46
44
|
|
47
|
-
|
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
|
-
|
49
|
+
END)
|
52
50
|
|
53
|
-
|
51
|
+
END)
|
54
52
|
|
55
|
-
|
53
|
+
END)
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
```
|
56
58
|
|
57
59
|
|
58
60
|
|