質問するログイン新規登録

質問編集履歴

3

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

2018/08/30 07:44

投稿

tec
tec

スコア9

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

2

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

2018/08/30 07:44

投稿

tec
tec

スコア9

title CHANGED
File without changes
body CHANGED
@@ -88,4 +88,46 @@
88
88
  tbl.name = 'Employee'
89
89
  ) data
90
90
 
91
- ```
91
+ ```
92
+
93
+ ---
94
+ **追記②**
95
+ やってみたこと@SQLServer
96
+ ```sql
97
+ with t1 (c1, c2, c3)
98
+ as(
99
+ select
100
+ max(case when col.column_id = 1 then ep.value end)
101
+ , max(case when col.column_id = 2 then ep.value end)
102
+ , max(case when col.column_id = 3 then ep.value end)
103
+ from sys.tables tbl
104
+ inner join sys.columns col
105
+ on col.object_id = tbl.object_id
106
+ inner join sys.extended_properties ep
107
+ on ep.major_id = col.object_id
108
+ and ep.minor_id = col.column_id
109
+ where
110
+ tbl.name = 'Employee'
111
+ group by
112
+ tbl.name
113
+ )
114
+ select
115
+ t1.c1
116
+ , t1.c2
117
+ , t1.c3
118
+ from t1
119
+
120
+ union all
121
+
122
+ select
123
+ CompanyId
124
+ , EmployeeId
125
+ , EmployeeName
126
+ from Employee
127
+ ```
128
+
129
+ **結果**
130
+ |c1|c2|c3|
131
+ |:--|:--:|--:|
132
+ |会社ID|社員ID|社員名|
133
+ |00001|A000000001|田中|

1

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

2018/08/30 06:17

投稿

tec
tec

スコア9

title CHANGED
File without changes
body CHANGED
@@ -3,9 +3,9 @@
3
3
 
4
4
  ```sql
5
5
  create table Employee (
6
- CompanyId varchar2(5), -- 会社ID
6
+ CompanyId 文字列型, -- 会社ID
7
- EmployeeId varchar2(10), -- 社員ID
7
+ EmployeeId 文字列型, -- 社員ID
8
- EmployeeName varchar2(100), -- 社員名
8
+ EmployeeName 文字列型, -- 社員名
9
9
  )
10
10
  ```
11
11
  **結果**
@@ -33,4 +33,59 @@
33
33
  from Employee
34
34
 
35
35
  として、[]内をSQL結果等から引っ張って設定したいです。
36
+ ```
37
+
38
+ ---
39
+ 追記
40
+
41
+ データベースの種類やバージョンの指定等は特にありません。
42
+ ただ、PL_SQLや、プログラム上でSQLを構築する方法ではなくて、
43
+ 一回のSQLでエイリアス名の設定を含めて取得することが出来るのかを知りたかったのです。
44
+ ※そのため、create table の構文を、「varchar2」指定していたのを「文字列型」と編集しました。
45
+
46
+ 例えばSQLServerの書き方だと、以下の方法でEmployeeテーブルの列のコメントを取得できましたが、
47
+ 「extended_properties.value」の値を、エイリアス名として指定した上でSQLで取得できるのか?ということです。
48
+ ```sql
49
+ select
50
+ tbl.name as TABLE_NAME
51
+ ,col.name as COLUMN_NAME
52
+ ,ep.value as COMMENT
53
+ from sys.tables tbl
54
+ inner join sys.columns col
55
+ on col.object_id = tbl.object_id
56
+ inner join sys.extended_properties ep
57
+ on ep.major_id = col.object_id
58
+ and ep.minor_id = col.column_id
59
+ where
60
+ tbl.name = 'Employee'
61
+ ```
62
+ **結果**
63
+ |TABLE_NAME|COLUMN_NAME|COMMENT|
64
+ |:--|:--:|--:|
65
+ |Employee|CompanyId|会社ID|
66
+ |Employee|EmployeeId|社員ID|
67
+ |Employee|EmployeeName|社員名|
68
+
69
+ ```sql
70
+ -- エイリアス部分を一回のSQLでなんらかの方法で指定する方法があるのか知りたいのです。
71
+ select
72
+ CompanyId as [case data.COLUMN_NAME='CompanyId' then data.COMMENT else '' end]
73
+ , EmployeeId as [if(data.COLUMN_NAME="EmployeeId") data.COMMENT]
74
+ , EmployeeName as [data.COMMENT]
75
+ from Employee,
76
+ (
77
+ select
78
+ tbl.name as TABLE_NAME
79
+ ,col.name as COLUMN_NAME
80
+ ,ep.value as COMMENT
81
+ from sys.tables tbl
82
+ inner join sys.columns col
83
+ on col.object_id = tbl.object_id
84
+ inner join sys.extended_properties ep
85
+ on ep.major_id = col.object_id
86
+ and ep.minor_id = col.column_id
87
+ where
88
+ tbl.name = 'Employee'
89
+ ) data
90
+
36
91
  ```