You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何根据行列数字标识匹配对应列值整合电压电流数据

MySQL 按Zone Attribute匹配对应电压、电流列的实现方案

你可以直接通过SQL查询完成列的动态映射,不需要额外做数据导出处理,以下是两种常用实现方式,根据实际场景选择即可:

  • 方案1:固定列场景用CASE WHEN硬编码匹配(性能最优、兼容性最好)
    如果你Voltage/Current列的后缀编号是固定范围(比如当前是1-6),直接用条件判断取值即可,写法最简单、执行效率最高:

    -- 请将下方的device_power_data替换为你实际的表名
    SELECT
        LOT_LOCATION,
        `Zone Attribute`,
        CASE `Zone Attribute`
            WHEN '1' THEN Voltage_1
            WHEN '2' THEN Voltage_2
            WHEN '3' THEN Voltage_3
            WHEN '4' THEN Voltage_4
            WHEN '5' THEN Voltage_5
            WHEN '6' THEN Voltage_6
        END AS Voltage,
        CASE `Zone Attribute`
            WHEN '1' THEN Current_1
            WHEN '2' THEN Current_2
            WHEN '3' THEN Current_3
            WHEN '4' THEN Current_4
            WHEN '5' THEN Current_5
            WHEN '6' THEN Current_6
        END AS Current
    FROM device_power_data;
    

    注意:如果你的Zone Attribute字段是整数类型,把WHEN后面的单引号去掉即可,避免类型隐式转换导致匹配失败返回NULL。

  • 方案2:动态列场景用预处理语句自动生成匹配规则(易维护)
    如果后续你可能新增Voltage_7、Current_7这类新列,不想每次改SQL,可以通过读取系统表自动拼接查询逻辑,不需要手动维护CASE里的分支:

    -- 配置项:把下方两处device_power_data替换为你的实际表名即可
    SET @query_sql = NULL;
    
    -- 自动拼接Voltage列的匹配规则
    SELECT GROUP_CONCAT(
        CONCAT('WHEN ''', REPLACE(COLUMN_NAME, 'Voltage_', ''), ''' THEN ', COLUMN_NAME)
        SEPARATOR ' '
    ) INTO @voltage_match
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = 'device_power_data'
      AND COLUMN_NAME LIKE 'Voltage_%';
    
    -- 自动拼接Current列的匹配规则
    SELECT GROUP_CONCAT(
        CONCAT('WHEN ''', REPLACE(COLUMN_NAME, 'Current_', ''), ''' THEN ', COLUMN_NAME)
        SEPARATOR ' '
    ) INTO @current_match
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = 'device_power_data'
      AND COLUMN_NAME LIKE 'Current_%';
    
    -- 组装完整查询SQL并执行
    SET @query_sql = CONCAT(
        'SELECT LOT_LOCATION, `Zone Attribute`, ',
        'CASE `Zone Attribute` ', @voltage_match, ' END AS Voltage, ',
        'CASE `Zone Attribute` ', @current_match, ' END AS Current ',
        'FROM device_power_data'
    );
    
    PREPARE run_stmt FROM @query_sql;
    EXECUTE run_stmt;
    DEALLOCATE PREPARE run_stmt;
    

    这个方案会自动识别表中所有符合Voltage_x、Current_x命名规则的列,新增列后无需修改代码即可自动适配,注意要确保你的数据库账号有访问INFORMATION_SCHEMA系统库的权限。

如果你需要把转换后的结构永久存储,只需要在SELECT语句前加上CREATE TABLE 新表名 AS,执行后就会生成你期望结构的新表,后续可以直接使用新表替代原有宽表。

内容的提问来源于stack exchange,提问作者GQS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:06:31