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

DB2中如何将同一ID的多行投递偏好合并为单行(含主次字段)

合并用户投递偏好记录方案

针对同一用户ID对应多行投递偏好的问题,可通过窗口函数+条件聚合的方式将多行合并为一行,保留首次出现的投递方式为主方式,第二次出现的为次要方式,具体实现如下:

假设你的数据表名为user_preferences,字段包含ID、First_Name、Last_Name、Preference。

通用SQL方案(适用于MySQL、PostgreSQL、SQL Server等支持窗口函数的数据库)

SELECT
    ID,
    First_Name,
    Last_Name,
    MAX(CASE WHEN rn = 1 THEN Preference END) AS Primary_Method,
    MAX(CASE WHEN rn = 2 THEN Preference END) AS Secondary_Method
FROM (
    -- 为每个ID下的投递偏好按存储顺序编号
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY (SELECT NULL)) AS rn
    FROM user_preferences
) t
GROUP BY ID, First_Name, Last_Name;

说明:

  • 子查询中ROW_NUMBER()函数按ID分组,为每组内的记录编号;ORDER BY (SELECT NULL)表示沿用数据库存储的自然顺序,若有明确的记录时间字段(如create_time),建议替换为该字段以保证排序准确性。
  • 外层通过条件聚合,将编号为1的偏好设为Primary_Method,编号为2的设为Secondary_Method,并通过GROUP BY合并同一ID的所有行。
  • 若部分用户仅有一种投递方式,Secondary_Method会返回NULL,可按需用COALESCE(MAX(CASE ...), '无')替换为自定义默认值。

SQL Server专属PIVOT方案

SELECT
    ID,
    First_Name,
    Last_Name,
    [1] AS Primary_Method,
    [2] AS Secondary_Method
FROM (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY (SELECT NULL)) AS rn
    FROM user_preferences
) t
PIVOT (
    MAX(Preference)
    FOR rn IN ([1], [2])
) p;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:38:28