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

同ID两行不同值,将第二个值移至另一列的SQL查询需求

解决同一ID多行数据合并为单行的SQL方案

针对你提出的需求——把每个ID对应的第二行Value提取到第一行的新列中,我整理了几种实用的SQL实现方法,你可以根据自己使用的数据库版本和实际数据情况选择:

方法一:使用窗口函数(通用现代数据库)

这是最灵活的方案,支持MySQL 8+、PostgreSQL、SQL Server等几乎所有现代数据库,还能自定义行的排序规则:

WITH numbered_rows AS (
    SELECT 
        ID,
        Value,
        -- 按ID分组,给每行编号,这里假设按Value升序确定第一/第二行
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Value) AS row_num
    FROM your_table_name
)
SELECT
    nr_main.ID,
    nr_main.Value,
    nr_second.Value AS `Value 1`
FROM numbered_rows nr_main
LEFT JOIN numbered_rows nr_second 
    ON nr_main.ID = nr_second.ID 
    AND nr_main.row_num = 1 
    AND nr_second.row_num = 2
WHERE nr_main.row_num = 1;

注意:如果你的数据有明确的行顺序依据(比如创建时间create_time),把ORDER BY Value改成ORDER BY create_time会更准确。

方法二:自连接(兼容老版本数据库)

如果你的数据库不支持窗口函数(比如MySQL 5.x),可以用自连接的方式实现,适合每个ID刚好只有两行的场景:

SELECT
    t_first.ID,
    t_first.Value,
    t_second.Value AS `Value 1`
FROM your_table_name t_first
JOIN your_table_name t_second 
    ON t_first.ID = t_second.ID 
    AND t_first.Value < t_second.Value
-- 确保t_first是每个ID的第一行(这里用最小Value判断)
WHERE NOT EXISTS (
    SELECT 1 
    FROM your_table_name t_check 
    WHERE t_check.ID = t_first.ID 
    AND t_check.Value < t_first.Value
);

方法三:聚合函数(极简方案)

如果每个ID确实只有两行数据,且你确定第一行是较小的Value、第二行是较大的Value,用聚合函数是最简洁的:

SELECT
    ID,
    MIN(Value) AS Value,
    MAX(Value) AS `Value 1`
FROM your_table_name
GROUP BY ID;

记得把代码里的your_table_name替换成你实际使用的表名哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:30:59