我有一个名为myTable的表包含一些数据,如下面的
id type name
1 1 A
2 2 B
3 3 C
4 2 D
5 3 E
6 3 F
如何编写查询以获得如下id:name
之类的结果type1 type2 type3
1:A 2:B 3:C
null 4:D 5:E
null null 6:F
答案 0 :(得分:1)
通常,这种类型的操作在应用程序层中更容易完成。但是,您可以通过枚举每种类型的每一行然后按它进行聚合来完成此操作。
我认为这可以满足您的需求:
select max(case when type = 1 then concat_ws(':', id, type) end) as type1,
max(case when type = 2 then concat_ws(':', id, type) end) as type2,
max(case when type = 3 then concat_ws(':', id, type) end) as type3
from (select t.*,
(@rn := if(@t = type, @rn + 1,
if(@t := type, 1, 1)
)
) as rn
from table t cross join
(select @rn := 0, @t := -1) vars
order by type, id
) t
group by rn