如何在SQL视图中新增列并基于条件从其他行获取英文名称值
创建满足需求的SQL视图方案
针对你的需求——在视图中新增English Name列,规则为意大利行取同id下比利时/西班牙的名称,其他国家直接用自身name——以下是两种通用的实现方案:
方案一:自连接方式
通过自连接关联同id下的比利时或西班牙行,获取对应英文名称:
CREATE VIEW country_names_with_english AS SELECT t.id, t.country, t.name, CASE WHEN t.country = 'Italy' THEN COALESCE(t_eng.name, t.name) ELSE t.name END AS "English Name" FROM your_table t LEFT JOIN your_table t_eng ON t.id = t_eng.id AND t_eng.country IN ('Belgium', 'Spain');
说明:
COALESCE用于兜底:如果同id下没有比利时或西班牙的行,会 fallback 到意大利行自身的name- 替换
your_table为实际表名即可使用
方案二:窗口函数方式
利用窗口函数按id分组,直接提取同组内的英文名称,无需连接操作:
CREATE VIEW country_names_with_english AS SELECT id, country, name, CASE WHEN country = 'Italy' THEN MAX(CASE WHEN country IN ('Belgium', 'Spain') THEN name END) OVER (PARTITION BY id) ELSE name END AS "English Name" FROM your_table;
说明:
- 窗口函数
OVER (PARTITION BY id)确保仅在同id范围内查找英文名称 - 若同
id下比利时和西班牙的名称不一致,可调整逻辑指定优先级(比如优先取比利时的名称,将MAX内的条件改为WHEN country = 'Belgium' THEN name)
内容的提问来源于stack exchange,提问作者sarika1810
相关产品推荐
相关产品推荐

