将多列转换为行
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)
);
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)
);