将多列转换为行

时间:2015-02-24 20:52:41

标签: sql oracle pivot unpivot

SELECT ID, PHONE1, PHONE2, PHONE3, EMAIL1, EMAIL2, EMAIL3, EMAIL4
FROM (SELECT ...)

如何将其转入此内容?

*ID | PHONE | EMAIL*

SELECT DISTINCT ID, PHONE, EMAIL
FROM ...

我可以做多个选择和UNION但我不知道是否有更好的方法。我的查询就像400行一样,做多个联合会一团糟!

1 个答案:

答案 0 :(得分:1)

正如bluefeet所说,要将列转换为行,您需要使用unpivot。 在你的情况下,你应该做两次手机,电话和电子邮件。类似的东西:

SELECT id,phone,email FROM (
select id,phone,EMAIL1, EMAIL2, EMAIL3, EMAIL4 from ...
unpivot (
phone for p1 
in (PHONE1, PHONE2, PHONE3)
))
unpivot (
email for e1
in (EMAIL1, EMAIL2, EMAIL3, EMAIL4)
);