基于同表现有字段新增name列的SQL实现方案咨询
实现方案:新增对应分组的英文名称列
可以通过CASE语句结合窗口函数或者自连接两种方式实现需求,以下是具体方案:
一、CASE语句结合窗口函数
这种方法无需额外关联表,通过窗口函数将同一no和country分组下的英文翻译值映射到每一行。假设每个no+country分组最多只有一条英文(language='en')记录,用MAX()聚合函数可精准提取该值:
SELECT no, country, language, translatedName, MAX(CASE WHEN language = 'en' THEN translatedName END) OVER (PARTITION BY no, country) AS name FROM your_table_name;
说明:
CASE WHEN language = 'en' THEN translatedName END筛选出当前分组里的英文翻译值,其他行该位置为NULLMAX()函数忽略NULL,取分组内的有效英文翻译值OVER (PARTITION BY no, country)指定分组依据,确保每个no+country组内的所有行都能拿到对应的英文名称
二、自连接实现
通过左连接原表自身,匹配同一no+country下的英文记录,保留原表所有行的同时获取英文名称:
SELECT t1.no, t1.country, t1.language, t1.translatedName, t2.translatedName AS name FROM your_table_name t1 LEFT JOIN your_table_name t2 ON t1.no = t2.no AND t1.country = t2.country AND t2.language = 'en';
说明:
- 使用
LEFT JOIN确保原表(t1)的所有行都被保留,即使某个no+country分组没有英文记录,name列会显示NULL - 连接条件
t2.language = 'en'精准匹配分组内的英文翻译行
内容的提问来源于stack exchange,提问作者Avani Agrawal Nath
相关产品推荐
相关产品推荐

