MySQL数据表行转列查询求助:按日期聚合endpoint的nb200值
解决MySQL行转列(按日期聚合)的问题
嗨,这个问题我之前也踩过坑!你写的CASE语句已经找对了行转列的思路,不过因为缺少聚合函数和分组操作,所以才会得到分散的多行结果。咱们来调整一下:
正确的SQL语句
SELECT date, MAX(CASE WHEN endpoint = 'toto' THEN nb200 END) AS 'toto', MAX(CASE WHEN endpoint = 'tata' THEN nb200 END) AS 'tata', MAX(CASE WHEN endpoint = 'tutu' THEN nb200 END) AS 'tutu' FROM your_table_name -- 记得替换成你的实际表名 GROUP BY date;
为什么这样能解决问题?
- 聚合函数(MAX):同一个日期下,每个
endpoint对应的nb200值只会出现一次,其他行都是NULL。用MAX可以过滤掉NULL,只保留该日期下对应endpoint的有效数值。因为你的表唯一键是(date, endpoint),所以用SUM、MIN也能得到同样的结果,选MAX只是更直观。 - GROUP BY date:把相同日期的所有行合并成一行,这样每个日期就只会输出一条结果,正好符合你想要的格式。
效果验证
执行上面的SQL后,你会得到完全符合需求的结果:
| date | toto | tata | tutu |
|---|---|---|---|
| d1 | 11 | 13 | 15 |
| d2 | 21 | 23 | 25 |
内容的提问来源于stack exchange,提问作者M.Be
相关产品推荐
相关产品推荐

