各位大家好,近期由于工作原因接触到了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聚合基本语法就不对,可以更简单,这样做
行转列列转行的实现吧,这样试试 ,可以参考下这个 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;
这个报错的意思是,select后面的列 必须得在 group by 中出现,你select 的d202202和d202203在group by后面都没有。
而且你这种方式也并不能达到目的。