質問編集履歴

3

タイトルをもっと具体的な質問に変更します

2018/08/30 07:44

投稿

tec
tec

スコア9

test CHANGED
@@ -1 +1 @@
1
- select した際に、列名コメントにす方法はありますか?
1
+ select した際に、列の別列コメントを指定できデータベースはありますか?またはその方法 ※PL/SQL, プログラムでの動的生成は除く
test CHANGED
File without changes

2

with句を利用してみた結果を追記

2018/08/30 07:44

投稿

tec
tec

スコア9

test CHANGED
File without changes
test CHANGED
@@ -179,3 +179,87 @@
179
179
 
180
180
 
181
181
  ```
182
+
183
+
184
+
185
+ ---
186
+
187
+ **追記②**
188
+
189
+ やってみたこと@SQLServer
190
+
191
+ ```sql
192
+
193
+ with t1 (c1, c2, c3)
194
+
195
+ as(
196
+
197
+ select
198
+
199
+ max(case when col.column_id = 1 then ep.value end)
200
+
201
+ , max(case when col.column_id = 2 then ep.value end)
202
+
203
+ , max(case when col.column_id = 3 then ep.value end)
204
+
205
+ from sys.tables tbl
206
+
207
+ inner join sys.columns col
208
+
209
+ on col.object_id = tbl.object_id
210
+
211
+ inner join sys.extended_properties ep
212
+
213
+ on ep.major_id = col.object_id
214
+
215
+ and ep.minor_id = col.column_id
216
+
217
+ where
218
+
219
+ tbl.name = 'Employee'
220
+
221
+ group by
222
+
223
+ tbl.name
224
+
225
+ )
226
+
227
+ select
228
+
229
+ t1.c1
230
+
231
+ , t1.c2
232
+
233
+ , t1.c3
234
+
235
+ from t1
236
+
237
+
238
+
239
+ union all
240
+
241
+
242
+
243
+ select
244
+
245
+ CompanyId
246
+
247
+ , EmployeeId
248
+
249
+ , EmployeeName
250
+
251
+ from Employee
252
+
253
+ ```
254
+
255
+
256
+
257
+ **結果**
258
+
259
+ |c1|c2|c3|
260
+
261
+ |:--|:--:|--:|
262
+
263
+ |会社ID|社員ID|社員名|
264
+
265
+ |00001|A000000001|田中|

1

バージョン等の追記、crate文の修正

2018/08/30 06:17

投稿

tec
tec

スコア9

test CHANGED
File without changes
test CHANGED
@@ -8,11 +8,11 @@
8
8
 
9
9
  create table Employee (
10
10
 
11
- CompanyId varchar2(5), -- 会社ID
11
+ CompanyId 文字列型, -- 会社ID
12
12
 
13
- EmployeeId varchar2(10), -- 社員ID
13
+ EmployeeId 文字列型, -- 社員ID
14
14
 
15
- EmployeeName varchar2(100), -- 社員名
15
+ EmployeeName 文字列型, -- 社員名
16
16
 
17
17
  )
18
18
 
@@ -69,3 +69,113 @@
69
69
  として、[]内をSQL結果等から引っ張って設定したいです。
70
70
 
71
71
  ```
72
+
73
+
74
+
75
+ ---
76
+
77
+ 追記
78
+
79
+
80
+
81
+ データベースの種類やバージョンの指定等は特にありません。
82
+
83
+ ただ、PL_SQLや、プログラム上でSQLを構築する方法ではなくて、
84
+
85
+ 一回のSQLでエイリアス名の設定を含めて取得することが出来るのかを知りたかったのです。
86
+
87
+ ※そのため、create table の構文を、「varchar2」指定していたのを「文字列型」と編集しました。
88
+
89
+
90
+
91
+ 例えばSQLServerの書き方だと、以下の方法でEmployeeテーブルの列のコメントを取得できましたが、
92
+
93
+ 「extended_properties.value」の値を、エイリアス名として指定した上でSQLで取得できるのか?ということです。
94
+
95
+ ```sql
96
+
97
+ select
98
+
99
+ tbl.name as TABLE_NAME
100
+
101
+ ,col.name as COLUMN_NAME
102
+
103
+ ,ep.value as COMMENT
104
+
105
+ from sys.tables tbl
106
+
107
+ inner join sys.columns col
108
+
109
+ on col.object_id = tbl.object_id
110
+
111
+ inner join sys.extended_properties ep
112
+
113
+ on ep.major_id = col.object_id
114
+
115
+ and ep.minor_id = col.column_id
116
+
117
+ where
118
+
119
+ tbl.name = 'Employee'
120
+
121
+ ```
122
+
123
+ **結果**
124
+
125
+ |TABLE_NAME|COLUMN_NAME|COMMENT|
126
+
127
+ |:--|:--:|--:|
128
+
129
+ |Employee|CompanyId|会社ID|
130
+
131
+ |Employee|EmployeeId|社員ID|
132
+
133
+ |Employee|EmployeeName|社員名|
134
+
135
+
136
+
137
+ ```sql
138
+
139
+ -- エイリアス部分を一回のSQLでなんらかの方法で指定する方法があるのか知りたいのです。
140
+
141
+ select
142
+
143
+ CompanyId as [case data.COLUMN_NAME='CompanyId' then data.COMMENT else '' end]
144
+
145
+ , EmployeeId as [if(data.COLUMN_NAME="EmployeeId") data.COMMENT]
146
+
147
+ , EmployeeName as [data.COMMENT]
148
+
149
+ from Employee,
150
+
151
+ (
152
+
153
+ select
154
+
155
+ tbl.name as TABLE_NAME
156
+
157
+ ,col.name as COLUMN_NAME
158
+
159
+ ,ep.value as COMMENT
160
+
161
+ from sys.tables tbl
162
+
163
+ inner join sys.columns col
164
+
165
+ on col.object_id = tbl.object_id
166
+
167
+ inner join sys.extended_properties ep
168
+
169
+ on ep.major_id = col.object_id
170
+
171
+ and ep.minor_id = col.column_id
172
+
173
+ where
174
+
175
+ tbl.name = 'Employee'
176
+
177
+ ) data
178
+
179
+
180
+
181
+ ```