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

如何调整SQL实现同一person_number下重复elements仅首行显示

解决方案

你可以通过窗口函数LAG()比对同分组内上一行的elements值,实现仅首行展示重复值的需求,修改后的查询语句如下:

WITH original_result AS (
    -- 你原来的UNION ALL查询整体放在这里作为基础结果集
    select 
        person_number ,
        elements,
        batchid,
        co_code
    from 
        per_all_people_f papf,
        elements_tab elements,
        batch_tab batch,
        company_det co
    where 
        papf.person_id = company_det.person_id
        and elements.element_id = company_det.element_id
        and batch.batchid = co.batchid
    union all
    select 
        person_number ,
        elements.absence_name elements,
        batchid,
        co_code
    from 
        per_all_people_f papf,
        absence_tab elements,
        batch_tab batch,
        company_det co
    where 
        papf.person_id = company_det.person_id
        and elements.absence_id =company_det.absence_id
        and batch.batchid = co.batchid
)
SELECT 
    person_number,
    -- 同person_number下,当前行和上一行elements值一致时返回空,否则返回当前值
    CASE WHEN LAG(elements, 1) OVER (PARTITION BY person_number ORDER BY batchid) = elements 
         THEN NULL 
         ELSE elements 
    END AS elements,
    batchid,
    co_code
FROM original_result
ORDER BY person_number, batchid

逻辑说明

  1. 先通过CTE封装你原有查询的结果,不需要改动原有业务逻辑
  2. LAG(elements,1) OVER (PARTITION BY person_number ORDER BY batchid) 作用是取同一个person_number分组内,上一行的elements值
  3. 用CASE做判断:当前行和上一行的elements值相同时返回空,否则返回原值,即可实现你要的展示效果
  4. 排序规则可根据你的实际需求调整,只要保证同一个person_number的行连续即可。

额外提示:你原有SQL中FROM子句的表列表末尾多了多余的逗号,我在上述示例中已经直接修正,执行时不会报错。如果你的数据库不支持CTE语法,直接把原有查询放在FROM子句中作为子查询使用,效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:06:07