SQL如何实现行转列:转换汽车分组关联汇率表为目标结构
解决思路
因为你已经明确同一car分组下所有日期对应的EURtoUSD值完全一致,所以只需要对car字段做去重或分组聚合即可得到对应结果,以下是不同需求场景的SQL写法:
场景1:目标表每行对应一个car和它的唯一EURtoUSD值
可以用两种写法实现:
- 分组聚合写法(兼容性最好,所有SQL数据库都支持)
SELECT car, MAX(EURtoUSD) AS EURtoUSD -- 同分组下值一致,替换为MIN、AVG也可以 FROM 你的实际表名 GROUP BY car;
- 去重写法
SELECT DISTINCT car, EURtoUSD FROM 你的实际表名;
场景2:目标表为行列转置结构,所有car作为列名、对应EURtoUSD作为列值
如果你的目标表是一行结果、每个car对应一个列存储汇率,可以用条件聚合实现:
SELECT MAX(CASE WHEN car = '替换为实际车型1' THEN EURtoUSD END) AS 替换为实际车型1, MAX(CASE WHEN car = '替换为实际车型2' THEN EURtoUSD END) AS 替换为实际车型2, MAX(CASE WHEN car = '替换为实际车型3' THEN EURtoUSD END) AS 替换为实际车型3 -- 有更多车型按以上格式补全即可 FROM 你的实际表名;
如果你使用的是支持PIVOT语法的数据库(如SQL Server、Oracle),也可以用以下写法:
SELECT * FROM ( SELECT car, EURtoUSD FROM 你的实际表名 ) AS source_table PIVOT ( MAX(EURtoUSD) FOR car IN ([替换为实际车型1], [替换为实际车型2], [替换为实际车型3]) ) AS pivot_table;
内容的提问来源于stack exchange,提问作者Priit Mets
相关产品推荐
相关产品推荐

