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

如何将数据表相邻行的ObjectID、TypeID两列合并到同一行展示

实现方案

你这个需求可以通过SQL语句实现,根据你使用的数据库版本不同,有两种常用实现方式:

方式一:支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server、Oracle等通用)

核心逻辑是先给所有行按ID升序排序,用LEAD窗口函数取当前行的下一行对应字段值,最后筛选奇数行即可实现两两合并:

WITH numbered_rows AS (
    SELECT 
        RulesID,
        ObjectID,
        TypeID,
        ROW_NUMBER() OVER(ORDER BY ID ASC) AS rn,
        LEAD(ObjectID) OVER(ORDER BY ID ASC) AS next_obj,
        LEAD(TypeID) OVER(ORDER BY ID ASC) AS next_type
    FROM 你的实际表名
)
SELECT 
    RulesID,
    ObjectID,
    TypeID,
    next_obj AS ObjectID2,
    next_type AS TypeID2
FROM numbered_rows
WHERE rn % 2 = 1;

如果你的数据存在多个不同的RulesID,需要按RulesID分别合并,只需要在ROW_NUMBER和LEAD的窗口函数里增加PARTITION BY RulesID即可。

方式二:不支持窗口函数的低版本数据库(比如MySQL 5.x)

可以用自定义变量生成行号后自连接实现:

SELECT 
    t1.RulesID,
    t1.ObjectID,
    t1.TypeID,
    t2.ObjectID AS ObjectID2,
    t2.TypeID AS TypeID2
FROM (
    SELECT 
        *,
        @rn := @rn + 1 AS rn
    FROM 你的实际表名, (SELECT @rn := 0) AS init
    ORDER BY ID ASC
) AS t1
LEFT JOIN (
    SELECT 
        *,
        @rn2 := @rn2 + 1 AS rn
    FROM 你的实际表名, (SELECT @rn2 := 0) AS init
    ORDER BY ID ASC
) AS t2 ON t1.rn + 1 = t2.rn
WHERE t1.rn % 2 = 1;

以上两种方案执行后的输出结果和你给出的预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:36:03