求实现指定列映射逻辑的动态SQL查询语句
问题描述
现有输入数据表:
col1 Col2 Col3 ---- ------ ----- R1 Rajesh R1 R2 Rohan R2 R3 venkat R3 R4 Total R1 R4 Total R2 R4 Total R3
期望生成如下结果表,其中Col4的值为Col3匹配Col1对应的Col2值:
Col1 Col2 Col3 Col4 ---- ---- ----- ---- R1 Rajesh R1 Rajesh R2 Rohan R2 Rohan R3 venkat R3 Venkat R4 Total R1 Rajesh R4 Total R2 Rohan R4 Total R3 Venkat
解决方案
可以通过自连接实现需求,将表自身关联,用Col3匹配另一条记录的Col1,从而获取对应的Col2值作为Col4。以下是通用SQL查询语句:
SELECT t.Col1, t.Col2, t.Col3, -- 如需统一首字母大写,可根据数据库类型调整函数: -- Oracle: INITCAP(t2.Col2) -- SQL Server: UPPER(LEFT(t2.Col2,1)) + LOWER(SUBSTRING(t2.Col2,2,LEN(t2.Col2))) -- MySQL: CONCAT(UPPER(LEFT(t2.Col2,1)), LOWER(SUBSTRING(t2.Col2,2))) t2.Col2 AS Col4 FROM your_table t LEFT JOIN your_table t2 ON t.Col3 = t2.Col1;
说明
- 将原表别名为
t作为主表,关联自身别名为t2,关联条件t.Col3 = t2.Col1用于匹配Col3对应的目标Col1记录,进而获取对应Col2值。 - 针对输出中
venkat转为Venkat的大小写需求,可根据使用的数据库类型调用对应转换函数(注释已列出主流数据库实现方式)。 - 替换语句中的
your_table为实际数据表名称。
内容的提问来源于stack exchange,提问作者sohan mp
相关产品推荐
相关产品推荐

