MYSQL在合并显示结果时遇到的问题

各位大家好,近期由于工作原因接触到了MYCQL工具库,在学习过程中遇到了一点疑惑恳请各位指点一二,感激不尽。
问题如下:
我的主要诉求为:
将原始表

 ID                SELL          DATE
 **01             XXX           202201
 **01             XXX           202202
 **02             XXX           202201
 **02             XXX           202202
 **03             XXX           202201
 **03             XXX           202202

中“sell”列的数据按“DATE”日期提取并按日期“202201”、“202202”等命名列后并列显示,并以“ID”分组,预期得到结果如下:

ID        202201      202202      
**01     XXX          XXX           
**02     XXX          XXX          
**03     XXX          XXX          

我根据初步学习得到如下代码,但在合并结果时报错。

select 
id,
d202202,
d202203
from
(SELECT sheet1.id, sheet1.sell as d202202,
''d202203
from sheet1 where date=202202

union all

SELECT sheet1.id, sheet1.sell as d202203,
''d202202
from sheet1 where date=202203)
as aa

group by id

报错内容如下:

1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'aa.d202202' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
时间: 0s

希望各位能帮帮我,最后祝大家身体健康生活愉快,十分感谢!

用我的 试下 能不能达到效果

SELECT 
    id,
    MAX(CASE WHEN date = 202202 THEN sell END) AS d202202, 
    MAX(CASE WHEN date = 202203 THEN sell END) AS d202203
FROM
(
    SELECT id, date, sell FROM sheet1 WHERE date = 202202
    
    UNION ALL
    
    SELECT id, date, sell FROM sheet1 WHERE date = 202203
) t
GROUP BY id

group by聚合基本语法就不对,可以更简单,这样做

img

行转列列转行的实现吧,这样试试 ,可以参考下这个 http://t.csdn.cn/vTQ4g

SELECT 
  ID,
  MAX(CASE WHEN DATE = '202201' THEN SELL ELSE NULL END) AS `202201`,
  MAX(CASE WHEN DATE = '202202' THEN SELL ELSE NULL END) AS `202202`
FROM c
GROUP BY ID;

img

这个报错的意思是,select后面的列 必须得在 group by 中出现,你select 的d202202和d202203在group by后面都没有。
而且你这种方式也并不能达到目的。