Sql 将表格从列格式转换为行格式
我有一张如下表:Sql 将表格从列格式转换为行格式,sql,oracle,plsql,Sql,Oracle,Plsql,我有一张如下表: 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 如果观察这些表,第二个表将基于第一个表中的数
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中实现这一点呢?我尝试在谷歌搜索,但找不到任何线索。这是unpivot的直接应用。在此操作期间忽略空值
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
你也可以用一个联盟来实现同样的目标
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