如何遍历数据表动态生成SQL CASE语句
最优实现方案
优先推荐直接在数据库中用SQL动态生成,无需导出数据到外部工具,效率最高且能自动处理转义问题,适配所有数据量场景。
1 通用SQL生成方法
假设你的两列表名为customer_mapping,对应字段为CUSTOMER_NAME、CUSTOMER_TYPE,可直接执行以下查询得到你需要的CASE语句:
MySQL/PostgreSQL 写法
SELECT CONCAT( 'CASE ', GROUP_CONCAT( 'WHEN CUSTOMER_NAME = ''', REPLACE(CUSTOMER_NAME, '''', ''''''), ''' THEN ''', REPLACE(CUSTOMER_TYPE, '''', ''''''), ''' ' SEPARATOR '' ), 'ELSE NULL END AS CUSTOMER_TYPE' ) AS generated_case_statement FROM customer_mapping;
SQL Server 写法
SELECT 'CASE ' + STRING_AGG( 'WHEN CUSTOMER_NAME = ''' + REPLACE(CUSTOMER_NAME, '''', '''''') + ''' THEN ''' + REPLACE(CUSTOMER_TYPE, '''', '''''') + ''' ', '' ) + 'ELSE NULL END AS CUSTOMER_TYPE' AS generated_case_statement FROM customer_mapping;
2 小批量数据Excel快速生成法
如果数据量在几千条以内,也可以用Excel快速生成:
- 把
CUSTOMER_NAME列内容粘贴到Excel A列,CUSTOMER_TYPE列内容粘贴到B列 - C1单元格输入公式:
="WHEN CUSTOMER_NAME = '"&SUBSTITUTE(A1,"'","''")&"' THEN '"&SUBSTITUTE(B1,"'","''")&"' " - 下拉C列公式填充所有行,复制C列所有内容,前后拼接
CASE和ELSE NULL END AS CUSTOMER_TYPE即可。
注:所有方法均内置了单引号转义逻辑,避免字段值包含单引号时生成的CASE语句出现语法错误。
内容的提问来源于stack exchange,提问作者user2491463
相关产品推荐
相关产品推荐

