質問編集履歴

7

修正

2019/07/18 05:03

投稿

Toshi_1995
Toshi_1995

スコア40

test CHANGED
File without changes
test CHANGED
File without changes

6

修正

2019/07/18 05:03

投稿

Toshi_1995
Toshi_1995

スコア40

test CHANGED
File without changes
test CHANGED
@@ -80,6 +80,8 @@
80
80
 
81
81
  (
82
82
 
83
+ memberid VARCHAR(9999),
84
+
83
85
  period VARCHAR(9999),
84
86
 
85
87
  cd VARCHAR(9999),
@@ -114,17 +116,17 @@
114
116
 
115
117
  mst
116
118
 
117
- |period|cd|sort_num|
119
+ |memberid|period|cd|sort_num|
118
120
 
119
- |--|--|--|
121
+ |--|--|--|--|
120
122
 
121
- |201804|00401|0|
123
+ |0001|201804|00401|0|
122
124
 
123
- |201804|00501|8|
125
+ |0002|201804|00501|8|
124
126
 
125
- |201806|00401|14|
127
+ |0001|201806|00401|14|
126
128
 
127
- |201807|00702|52|
129
+ |0003|201807|00702|52|
128
130
 
129
131
 
130
132
 

5

修正

2019/07/18 04:47

投稿

Toshi_1995
Toshi_1995

スコア40

test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,6 @@
1
1
  RedshiftにPL/pgSQLでUNLOAD文を登録しているのですが、CALLで指定した変数がUNLOAD文の中ではカラムとして扱われてしまいます。
2
2
 
3
3
  ```SQL
4
-
5
- ここに言語を入力
6
4
 
7
5
  CREATE OR REPLACE PROCEDURE sp_test
8
6
 

4

修正

2019/07/18 04:43

投稿

Toshi_1995
Toshi_1995

スコア40

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,8 @@
1
1
  RedshiftにPL/pgSQLでUNLOAD文を登録しているのですが、CALLで指定した変数がUNLOAD文の中ではカラムとして扱われてしまいます。
2
2
 
3
+ ```SQL
4
+
3
- ```ここに言語を入力
5
+ ここに言語を入力
4
6
 
5
7
  CREATE OR REPLACE PROCEDURE sp_test
6
8
 
@@ -32,9 +34,9 @@
32
34
 
33
35
  FROM
34
36
 
35
- a t1
37
+ mst t1
36
38
 
37
- LEFT JOIN b t2 ON t1.memberid = t2.memberid and t1.period = t2.period and t1.cd = t2.category_cd || t2.variable_cd
39
+ LEFT JOIN value_table t2 ON t1.memberid = t2.memberid and t1.period = t2.period and t1.cd = t2.category_cd || t2.variable_cd
38
40
 
39
41
  WHERE t1.sort_num <> \'0\'
40
42
 
@@ -70,11 +72,95 @@
70
72
 
71
73
  ```
72
74
 
75
+ #テーブル
76
+
77
+
78
+
79
+ ```SQL
80
+
81
+ CREATE TABLE mst
82
+
83
+ (
84
+
85
+ period VARCHAR(9999),
86
+
87
+ cd VARCHAR(9999),
88
+
89
+ sort_num VARCHAR(9999)
90
+
91
+ );
92
+
93
+ ```
94
+
95
+
96
+
97
+ ```SQL
98
+
99
+ CREATE TABLE value_table
100
+
101
+ (
102
+
103
+ memberid VARCHAR(9999) ,
104
+
105
+ period VARCHAR(9999) ,
106
+
107
+ category_cd VARCHAR(9999) ,
108
+
109
+ variable_cd VARCHAR(9999) ,
110
+
111
+ value VARCHAR(9999)
112
+
113
+ )
114
+
115
+ ```
116
+
117
+ mst
118
+
119
+ |period|cd|sort_num|
120
+
121
+ |--|--|--|
122
+
123
+ |201804|00401|0|
124
+
125
+ |201804|00501|8|
126
+
127
+ |201806|00401|14|
128
+
129
+ |201807|00702|52|
130
+
131
+
132
+
133
+ value_table
134
+
135
+ |memberid|period|category_cd|variable_cd|value|
136
+
137
+ |--|--|--|--|--|
138
+
139
+ |0001|201804|004|01|50
140
+
141
+ |0002|201804|005|01|30
142
+
143
+ |0003|201806|004|01|20
144
+
145
+ |0004|201807|007|02|10
146
+
147
+
148
+
149
+
150
+
151
+
152
+
73
153
 
74
154
 
75
155
  エラー内容
76
156
 
77
- 42703: column "start_period" does not exist in a
157
+ 42703: column "start_period" does not exist in t1, t2, unnamed_join
158
+
159
+
160
+
161
+
162
+
163
+
78
164
 
79
165
 
80
166
 

3

修正

2019/07/18 04:42

投稿

Toshi_1995
Toshi_1995

スコア40

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ```ここに言語を入力
4
4
 
5
- CREATE OR REPLACE PROCEDURE test
5
+ CREATE OR REPLACE PROCEDURE sp_test
6
6
 
7
7
  (start_period varchar, end_period varchar)
8
8
 
@@ -66,7 +66,7 @@
66
66
 
67
67
  --呼び出し
68
68
 
69
- CALL wowdmp.sp_test('201804','201809');
69
+ CALL sp_test('201804','201809');
70
70
 
71
71
  ```
72
72
 

2

修正

2019/07/18 04:21

投稿

Toshi_1995
Toshi_1995

スコア40

test CHANGED
@@ -1 +1 @@
1
- PL/SQL UNLOAD文の中に変数を入れたい
1
+ PL/pgSQL UNLOAD文の中に変数を入れたい
test CHANGED
@@ -1,8 +1,8 @@
1
- PL/SQLでUNLOAD文を登録しているのですが、CALLで指定した変数がUNLOD文の中ではカラムとして扱われてしまいます。
1
+ RedshiftにPL/pgSQLでUNLOAD文を登録しているのですが、CALLで指定した変数がUNLOAD文の中ではカラムとして扱われてしまいます。
2
2
 
3
3
  ```ここに言語を入力
4
4
 
5
- CREATE OR REPLACE PROCEDURE sp_test
5
+ CREATE OR REPLACE PROCEDURE test
6
6
 
7
7
  (start_period varchar, end_period varchar)
8
8
 
@@ -14,29 +14,55 @@
14
14
 
15
15
  UNLOAD('
16
16
 
17
+ WITH middle_table AS
18
+
19
+ (
20
+
17
21
  SELECT
18
22
 
23
+ t1.period
24
+
25
+ ,t1.memberid
26
+
19
- ~
27
+ ,t1.cd
28
+
29
+ ,COALESCE(t2.value,\'0\') as value
30
+
31
+ ,t1.sort_num
20
32
 
21
33
  FROM
22
34
 
23
- a
35
+ a t1
24
36
 
25
- WHERE
37
+ LEFT JOIN b t2 ON t1.memberid = t2.memberid and t1.period = t2.period and t1.cd = t2.category_cd || t2.variable_cd
26
38
 
27
- ~
39
+ WHERE t1.sort_num <> \'0\'
28
40
 
29
- AND period BETWEEN start_period AND end_period;'
41
+ AND t1.period BETWEEN start_period AND end_period
30
42
 
31
- TO 'xxxx' CREDENTIALS 'aws_access_key_id=yyyy;aws_secret_access_key=zzzz' delimiter ',' GZIP PARALLEL OFF;
43
+ )
32
44
 
45
+ SELECT
33
46
 
47
+ period
48
+
49
+ ,memberid
50
+
51
+ ,LISTAGG(value,\',\') within group (order by sort_num::int) as value
52
+
53
+ FROM
54
+
55
+ middle_table
56
+
57
+ GROUP BY
58
+
59
+ 1,2')
60
+
61
+ TO 'xxx' CREDENTIALS 'aws_access_key_id=yyy;aws_secret_access_key=zzz' delimiter ',' GZIP PARALLEL OFF;
34
62
 
35
63
  END;
36
64
 
37
65
  $$ LANGUAGE plpgsql;
38
-
39
-
40
66
 
41
67
  --呼び出し
42
68
 

1

修正

2019/07/18 04:20

投稿

Toshi_1995
Toshi_1995

スコア40

test CHANGED
File without changes
test CHANGED
File without changes