この質問は言いにくいようですが、私の状況を説明した後は理解しやすいはずです。2つのテーブルがあります。1つはインストラクターデータを保持するINSTRUCTORSと呼ばれ、もう1つはINSTRUCTORSテーブルに格納されているさまざまなID列のID値を保持するLIST_OPTION_ITEMと呼ばれます。含めるべき3番目のおそらく重要なテーブルはLIST_OPTION_TYPEです。これには、INSTRUCTORSにあるID列のIDが含まれています。おそらく、サンプルデータと私の希望する出力を表示することで説明する方が簡単でしょう。
インストラクター
RANK_ID | SPECIALTY_ID | DUTY_TITLE_ID | SERVICE_BRANCH_ID | STATUS_ID | UNIT_ID | OFFICE_SYMBOL_ID |
---|---|---|---|---|---|---|
1354 | 319 | 931 | 2604 | 1378 | 1406 | 1429 |
LIST_OPTION_ITEM
OPTION_ITEM_ID | OPTION_TYPE_ID | ITEM_VALUE |
---|---|---|
1354 | 22 | CAPT |
319 | 20 | CBRNトラウマナース |
931 | 21 | IDMT-戦隊医療要素 |
2604 | 128 | 46N看護師 |
1378 | 23 | 米国 |
1406 | 24 | ガード |
1429 | 126 | CERFP |
LIST_OPTION_TYPE
OPTION_TYPE_ID | OPTION_TYPE |
---|---|
20 | 専門 |
21 | Duty_Title |
22 | ランク |
23 | Service_Branch |
24 | 状態 |
126 | 単位 |
128 | Office_Symbol |
共通の列がないため、INSTRUCTORSとLIST_OPTION_ITEMを結合できないことに注意してください。ただし、LIST_OPTION_ITEMとLIST_OPTION_TYPEはに参加できOPTION_TYPE_ID
ます。SELECT
クエリからの希望する出力:
ランク | 専門 | 職務タイトル | 軍種 | 状態 | 単位 | オフィスシンボル |
---|---|---|---|---|---|---|
CAPT | CBRNトラウマナース | IDMT-戦隊医療要素 | 46N看護師 | 米国 | ガード | CERFP |
私はいくつかの解決策を試しましたが、何も思いつきません。クロス結合などが必要ですか?助けていただければ幸いです。
ピボット関数とピボット解除関数を試してみました
以下はサンプルSQLです:
with inst as (select inst_id, col, col_id
from (select rownum as inst_id, a.* from instructor a)
unpivot
(col_id for col in (status_id as 'STATUS',rank_id as 'RANK',specialty_id as 'SPECIALTY',duty_title_id as 'DUTY_TITLE')
))
select * from
(select inst_id,col,item_value from inst,
(select a.option_type,b.option_item_id,b.item_value from LIST_OPTION_TYPE a, list_option_id b
where a.option_type_id = b.option_type_id) opt
where inst.col = upper(option_type)
and option_item_id = col_id)
pivot
(max(item_value)
for col in ('STATUS','RANK','SPECIALTY','DUTY_TITLE')
) order by inst_id;
これにより、目的の出力が得られます
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加