表
id | name | year
Run Code Online (Sandbox Code Playgroud)
数据:
1 | ham | 2006
2 | ham | 2007
3 | ham | 2008
4 | amm | 2007
5 | amm | 2008
6 | inn | 2009
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试构建一个sql,它给我以下输出(或类似)
name | y1 | y2 | y3 | y4
ham | 2006 | 2007 | 2008 | null
amm | null | 2007 | 2008 | null
inn | null | null | null | 2009
Run Code Online (Sandbox Code Playgroud)
当进行多个(自我)左连接时,我得到了这个,但只有在为该名称设置2006时.有没有办法实现这个目标?
你想要一个所谓的"枢轴",你需要的是一个有条件的sum:
select
name,
sum(year = 2006) as y1,
sum(year = 2007) as y2,
sum(year = 2008) as y3,
sum(year = 2009) as y4
from mytable
group by name;
Run Code Online (Sandbox Code Playgroud)
没有加入,没有muss,没有大惊小怪.它会表现得非常好.
这是有效的,因为在mysql中,true是1和false是0,所以总结一个条件计算它是多少次真实!
请注意,null对于"无数据"年,这将为您提供零而不是s,这可能更好.如果你真的想要空值,请使用if(sum(year = 2006) = 0, null, sum(year = 2006)) as y1等,但希望你不需要它.