我有一个名为“table1”的表,其中包含以下行。
ID category1 category2
-------------------------
1 value1 value2
2 value3 value4
然后我想从“table1”上面创建一个视图。在我看来只有三列。我引入了名为“category”的新列,它可以存储类别的类型。然后,“category1”和“category2”列名都属于该“category”列,并引入了另一个名为value的新列来存储每个类别的值。允许ID列重复。
我生成的视图应该是,
ID category value
--------------------------
1 category1 value1
1 category2 value2
2 category1 value3
2 category2 value4
我正在使用Oracle。反正有没有做过这样的事情?是可能还是不可能?
答案 0 :(得分:3)
使用Union
[All
]就足够了:
create or replace view v_table1 as
select * from
(
select t1.id, 'category1' category,t1.category1 value from table1 t1
union all
select t2.id, 'category2' category, t2.category2 from table1 t2
)
order by id, value;
答案 1 :(得分:1)
一个简单的UNION
(ALL
)可以做到这一点:
SQL> WITH test (id, category1, category2)
2 AS (SELECT 1, 'value1', 'value2' FROM DUAL
3 UNION
4 SELECT 2, 'value3', 'value4' FROM DUAL)
5 SELECT id, 'category1' category, category1 VALUE FROM test
6 UNION ALL
7 SELECT id, 'categor12', category2 FROM test
8 ORDER BY 1, 2;
ID CATEGORY VALUE
---------- --------- ------
1 category1 value1
1 categor12 value2
2 category1 value3
2 categor12 value4
SQL>
答案 2 :(得分:1)
您也可以使用unpivot功能:
select *
from table1 unpivot(
value for category in(category1, category2)
);