我有一张如下表格:
entity field_1 field_2 field_3
1 A
2 B
3 E C
我必须将表格转换为以下结构:
entity param_id param_value
1 paramId_1 A
2 paramId_2 B
3 ParamId_2 E
3 ParamId_3 C
如果观察表格,将根据第一个表格中的数据形成第二个表格。表1中的每个实体有3列。因此,表2最多可以包含3个行,最多只能包含1个实体。行数取决于第一个表中存在的非空值。
那么如何在Oracle中实现这一目标?我尝试在谷歌搜索,但找不到任何线索。
答案 0 :(得分:1)
这是unpivot
的直接应用。在此操作期间将忽略null
个值。
select entity,case when field='FIELD_1' then 'paramID_1'
when field='FIELD_2' then 'paramID_2'
when field='FIELD_3' then 'paramID_3'
end as param_id,
param_value
from t
unpivot (param_value for field in (field_1,field_2,field_3)) u
答案 1 :(得分:0)
你也可以使用union all来实现同样的目的。
SELECT e.entity
, e.param_id
, param_value = e.field_1
FROM dbo.entity (NOLOCK) e
UNION ALL
SELECT e1.entity
, e1.param_id
, param_value = e1.field_2
FROM dbo.entity (NOLOCK) e1
UNION ALL
SELECT e2.entity
, e2.param_id
, param_value = e2.field_3
FROM dbo.entity (NOLOCK) e2