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

SQL实现:将同一序列号的多Flag记录合并为单条记录

问题:合并同序列号的Flag字段记录

现有表格片段(包含四列:SERIAL_NUMBER、BIP_WIDE_AREA_PORT、IP_FAST_REROUTE、GWIP_MULTICAST):

SERIAL_NUMBER | BIP_WIDE_AREA_PORT | IP_FAST_REROUTE | GWIP_MULTICAST
_____________________________________________________________________
N7608760           YES                 NO                 NO
N7608760           NO                  YES                NO

需要将同一序列号的所有记录合并为单条,规则为:只要该序列号对应的某Flag字段存在任意一条YES记录,合并后该字段值为YES,否则为NO。期望的合并结果:

SERIAL_NUMBER | BIP_WIDE_AREA_PORT | IP_FAST_REROUTE | GWIP_MULTICAST
_____________________________________________________________________
N7608760           YES                 YES                NO

当前使用的CASE语句写法:

CASE 
    WHEN P1.name LIKE '%BIP WIDE AREA PORT%' THEN 'Yes'
    ELSE 'No' 
END AS BIP_WIDE_AREA_PORT,
CASE 
    WHEN P1.name LIKE 'NEXTG BACKUP' THEN 'Yes'
    ELSE 'No' 
END AS NEXTG_BACKUP

不知如何实现合并需求。


解决方案

核心思路是按序列号分组,对每个Flag字段使用聚合函数保留优先级更高的YES(字符串YES的排序优先级高于NO,用MAX()即可实现)。

方法1:基于原始表直接生成并合并

如果你的Flag字段是通过P1表的name字段判断生成的,直接将CASE语句嵌套进聚合函数,再按SERIAL_NUMBER分组:

SELECT 
    SERIAL_NUMBER,
    MAX(CASE WHEN P1.name LIKE '%BIP WIDE AREA PORT%' THEN 'YES' ELSE 'NO' END) AS BIP_WIDE_AREA_PORT,
    MAX(CASE WHEN P1.name LIKE '%IP FAST REROUTE%' THEN 'YES' ELSE 'NO' END) AS IP_FAST_REROUTE,
    MAX(CASE WHEN P1.name LIKE '%GWIP MULTICAST%' THEN 'YES' ELSE 'NO' END) AS GWIP_MULTICAST,
    MAX(CASE WHEN P1.name LIKE 'NEXTG BACKUP' THEN 'YES' ELSE 'NO' END) AS NEXTG_BACKUP
FROM P1
GROUP BY SERIAL_NUMBER;

方法2:基于已生成Flag字段的表格合并

如果已经有了包含Flag字段的中间表(假设表名为device_flags),直接分组聚合即可:

SELECT 
    SERIAL_NUMBER,
    MAX(BIP_WIDE_AREA_PORT) AS BIP_WIDE_AREA_PORT,
    MAX(IP_FAST_REROUTE) AS IP_FAST_REROUTE,
    MAX(GWIP_MULTICAST) AS GWIP_MULTICAST
FROM device_flags
GROUP BY SERIAL_NUMBER;

原理说明:字符串'YES'的ASCII码大于'NO',因此MAX()聚合函数会在分组内优先保留YES值,只要该组内有一条记录为YES,合并后的字段值就为YES,完全符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:33:39