我有一张未正常化的表格,我无法更改表格的结构。该表包含6个用于保存首选项的列,即preference_num1 ... preference_num6。我想从表中提取数据,以便看起来有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)
由于
答案 0 :(得分:3)
如果您搜索UNPIVOT技术或“oracle列到行”,您可能会找到更多相关信息。
执行此操作的一种方法如下所示,如果您输入一个(索引)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查询一次。
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