很多场景下,需要将长表根据不同的搜索条件GroupBy之后变成横向的短表,例如:
分公司收益年份a1002022b2002022c3002022a4002021b5002021c6002021想要变化为:
分公司2022收益2021收益a100400b200500c300600笨办法是分别通过where 年份=2021和where 年份=2022并以分公司groupby后获得相同结构的列,然后以分公司为条件进行join。这种写法的问题在于有几列就要写几个相同结构的子查询,然后将所有列Join,非常繁杂且难于维护。
【更简洁的写法】用case when配合sum:
SELECT分公司,SUM(CASE WHEN YEAR(年份) = 2022 THEN 收益 END) AS 2022收益,SUM(CASE WHEN YEAR(年份) = 2021 THEN 收益 END) AS 2021收益FROMtransactionsGROUP BY分公司;一个查询就可以搞定,而且非常便于维护。