在mysql中将列转换为行

在mysql中将列转换为行,mysql,sql,union,transpose,Mysql,Sql,Union,Transpose,我想将结果列转换为行,而不使用MYSQL中的排名方法 select pid , phone from mt where pid = 1 ; Result : pid phone 1 556 1 678 我想要这种格式: pid phone1 phone2 1 556 678 类似地,如果执行一个只有1个值的查询,如下所示 选择pid,电话从mt,其中pid=2 它应该同时产生phone1列和phone2列,但是phone2列应该是空的,

我想将结果列转换为行,而不使用MYSQL中的排名方法

select pid , phone  from mt where pid = 1 ; 

Result :

pid   phone
1     556
1     678
我想要这种格式:

pid   phone1   phone2
1       556     678
类似地,如果执行一个只有1个值的查询,如下所示

选择pid,电话从mt,其中pid=2

它应该同时产生phone1列和phone2列,但是phone2列应该是空的,如下所示

  pid   phone1     phone2
   2     123        NULL

如何继续?

如果只有两个值,可以使用
min()
max()

选择pid,min(电话)作为电话1,
(最小(电话)最大(电话)然后最大(电话)结束时的情况)为电话2
从t
pid分组;
select pid, min(phone) as phone_1,
       (case when min(phone) <> max(phone) then max(phone) end) as phone_2
from t
group by pid;