将多列转换成行
问题描述:
SELECT ID, PHONE1, PHONE2, PHONE3, EMAIL1, EMAIL2, EMAIL3, EMAIL4
FROM (SELECT ...)
如何将它转换为此?将多列转换成行
*ID | PHONE | EMAIL*
SELECT DISTINCT ID, PHONE, EMAIL
FROM ...
我可以做多种选择和UNION
他们,但我不知道是否有这样做的更好的方法。我的查询长度为400行,并且执行多个工会将变得很糟糕!
答
正如bluefeet所说,要将列转换为行,您需要使用unpivot。 在你的情况下,你应该做两次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)
);
这实际上是一个不透明而不是透视。 Unpivot将多个列转换为行。枢轴则相反。既然你想要转换“对”列,IMO最简单的方法就是组合。 – Taryn 2015-02-24 20:55:16
而这个问题就是为什么你不会像第一个那样构建表格。如果问题是“哪个客户端的电话号码是12345678?”,则会出现同样的问题。“因为您必须明确检查每个列。如果在一个连接中需要这个列(尽管这不太可能),那么对你而言就是一个祸根。如果你需要存储更多的号码或电子邮件地址,这也是不灵活的。 – Turophile 2015-02-24 21:27:30