如何编写将电话号码从列转换为单个列的SQL查询?
如何编写将电话号码从列转换为单个列的SQL查询。假设有多个personID,每个personID最多有3种电话类型,主要、次要和第三。目前,对于每个人,他们被列在三个单独的列中 理想的结果是电话号码都在一列中,而另一列包含电话类型 当前数据 个人识别码 主电话 辅助电话 第三方电话 1. 2221111111 5551111111 9991111111 2. 2221111112 5551111112 9991111112 3. 2221111113 5551111113 9991111113 4. 2221111114 5551111114 9991111114如何编写将电话号码从列转换为单个列的SQL查询?,sql,oracle,union,unpivot,lateral-join,Sql,Oracle,Union,Unpivot,Lateral Join,如何编写将电话号码从列转换为单个列的SQL查询。假设有多个personID,每个personID最多有3种电话类型,主要、次要和第三。目前,对于每个人,他们被列在三个单独的列中 理想的结果是电话号码都在一列中,而另一列包含电话类型 当前数据 个人识别码 主电话 辅助电话 第三方电话 1. 2221111111 5551111111 9991111111 2. 2221111112 5551111112 9991111112 3. 2221111113 5551111113 9991111113
在Oracle 12c版的起始版本中,您可以使用
交叉应用
:
select t.person_id, x.*
from mytable t
cross apply (
select primary_phone as phone_number, 'Primary' as phone_type from dual
union all select secondary_phone, 'Secondary' from dual
union all select tertiary_phone, 'Tiertiary' from dual
) x
在早期版本中,您可以使用union all
:
select person_id, primary_phone as phone_number, 'Primary' as phone_type from mytable
union all select person_id, secondary_phone, 'Secondary' from mytable
union all select person_id, tertiary_phone, 'Tiertiary' from mytable
您似乎想执行
unpivot
with p as (
select 1 person_id,
'2221111111' primary_phone,
'5551111111' secondary_phone,
'9991111111' tertiary_phone
from dual
union all
select 2,
'2221111112' primary_phone,
'5551111112' secondary_phone,
'9991111112' tertiary_phone
from dual
)
select person_id,
phone_number,
phone_type
from p
unpivot (
phone_number
for phone_type in (
primary_phone as 'Primary',
secondary_phone as 'Secondary',
tertiary_phone as 'Tertiary'
)
)
A显示正在运行的查询非常感谢。无论哪种选择都会很有帮助谢谢。。。