将多列转换为行

Convert multiple columns into rows

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

我如何将其转换成这个?

*ID | PHONE | EMAIL*

SELECT DISTINCT ID, PHONE, EMAIL
FROM ...

我可以进行多项选择并 UNION 它们,但我想知道是否有更好的方法。我的查询大约有 400 行,做多个联合会很麻烦!

正如 bluefeet 所说,将列转换为行需要使用 unpivot。 在您的情况下,您应该为 phone 和电子邮件执行 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)
);