1

正規化されていないテーブルがあり、テーブルの構造を変更できません。テーブルには、preference_num1...preference_num6 という設定を保持するための 6 つの列が含まれています。テーブルからデータを抽出して、1 つの設定が 1 つの行にある 6 つの行があるようにします。

明確にするために、出力は Id,semester_start,year_start,email,preference_num である必要があります。そして、各行は 6 行に分割されます。

Name                    Null     Type          
----------------------- -------- ------------- 
ID                               number (primary key)
YEAR_START                       NUMBER        
SEMESTER_START                   VARCHAR2(8)   
EMAIL                            VARCHAR2(100) 
PREFERENCE_NUM_1                 VARCHAR2(1)   
PREF_INSTITUTION_NAME_1          VARCHAR2(100) 
PREF_INSTITUTION_CODE_1          VARCHAR2(15)  
PREF_COURSE_TITLE_1              VARCHAR2(100) 
COURSE_CODE_1                    VARCHAR2(15)  
OFFERING_LABLE_1                 VARCHAR2(15)  
PREFERENCE_NUM_2                 VARCHAR2(1)   
PREF_INSTITUTION_NAME_2          VARCHAR2(100) 
PREF_INSTITUTION_CODE_2          VARCHAR2(15)  
PREF_COURSE_TITLE_2              VARCHAR2(100) 
COURSE_CODE_2                    VARCHAR2(15)  
OFFERING_LABLE_2                 VARCHAR2(15)  
PREFERENCE_NUM_3                 VARCHAR2(1)   
PREF_INSTITUTION_NAME_3          VARCHAR2(100) 
PREF_INSTITUTION_CODE_3          VARCHAR2(15)  
PREF_COURSE_TITLE_3              VARCHAR2(100) 
COURSE_CODE_3                    VARCHAR2(15)  
OFFERING_LABLE_3                 VARCHAR2(15)  
PREFERENCE_NUM_4                 VARCHAR2(1)   
PREF_INSTITUTION_NAME_4          VARCHAR2(100) 
PREF_INSTITUTION_CODE_4          VARCHAR2(15)  
PREF_COURSE_TITLE_4              VARCHAR2(100) 
COURSE_CODE_4                    VARCHAR2(15)  
OFFERING_LABLE_4                 VARCHAR2(15)  
PREFERENCE_NUM_5                 VARCHAR2(1)   
PREF_INSTITUTION_NAME_5          VARCHAR2(100) 
PREF_INSTITUTION_CODE_5          VARCHAR2(15)  
PREF_COURSE_TITLE_5              VARCHAR2(100) 
COURSE_CODE_5                    VARCHAR2(15)  
OFFERING_LABLE_5                 VARCHAR2(15)  
PREFERENCE_NUM_6                 VARCHAR2(1)   
PREF_INSTITUTION_NAME_6          VARCHAR2(100) 
PREF_INSTITUTION_CODE_6          VARCHAR2(15)  
PREF_COURSE_TITLE_6              VARCHAR2(100) 
COURSE_CODE_6                    VARCHAR2(15)  
OFFERING_LABLE_6                 VARCHAR2(15)  
DATA_EXTRACTION_DATE             DATE          
OFFER_DATE_1                     DATE          
OFFER_RESPONSE_1                 VARCHAR2(20)  
FINAL_OFFER_RESPONSE_1           VARCHAR2(20)  
OFFER_DATE_2                     DATE          
OFFER_RESPONSE_2                 VARCHAR2(20)  
FINAL_OFFER_RESPONSE_2           VARCHAR2(20)  
OFFER_DATE_3                     DATE          
OFFER_RESPONSE_3                 VARCHAR2(20)  
FINAL_OFFER_RESPONSE_3           VARCHAR2(20)  
OFFER_DATE_4                     DATE          
OFFER_RESPONSE_4                 VARCHAR2(20)  
FINAL_OFFER_RESPONSE_4           VARCHAR2(20)  
OFFER_DATE_5                     DATE          
OFFER_RESPONSE_5                 VARCHAR2(20)  
FINAL_OFFER_RESPONSE_5           VARCHAR2(20)  
OFFER_DATE_6                     DATE          
OFFER_RESPONSE_6                 VARCHAR2(20)  
FINAL_OFFER_RESPONSE_6           VARCHAR2(20)  

ありがとう

4

1 に答える 1

3

UNPIVOT手法または「oraclecolumnstorows」を検索すると、これに関する詳細情報が見つかる場合があります。

これを行う1つの方法は、以下のとおりです。これは、1つの(インデックス付き)IDを入力する場合にうまく機能します。例を単純にするために、3つの設定のみを取得しています。

これが基本的な考え方です。

select id, sem_start, year_start, pref_num1 from table_1 where id = input_id
union all 
select id, sem_start, year_start, pref_num2 from table_1 where id = input_id
union all
select id, sem_start, year_start, pref_num3 from table_1 where id = input_id

代わりにこのクエリを使用する必要があります。IDでクエリを実行するのは1回だけなので、パフォーマンスが向上します。

with t1 as
(select * from table_1 where id = id1)
select id, sem_start, year_start, pref_num1 from t1
union all 
select id, sem_start, year_start, pref_num2 from t1
union all
select id, sem_start, year_start, pref_num3 from t1
于 2012-08-20T03:36:03.227 に答える