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

SQL中如何实现重复列值在多行仅显示一次?

当然可行!这里给你两种贴合需求的实现思路

首先要明确:这种重复值仅显示一次的需求,是在查询结果层面做显示逻辑处理,不会修改数据库里的原始数据——毕竟原始数据的完整性还是要保留的对吧?

方法1:仅处理第一列(A列)的重复显示

如果你的需求只是第一列(示例里的"A/B/C"列)重复时只在第一次出现时显示,后续行该列留空,可以用ROW_NUMBER()窗口函数来实现:

SELECT
    -- 当是分组内第一行时显示A列值,否则显示空字符串
    CASE WHEN row_num_group = 1 THEN col_a ELSE '' END AS col_a,
    col_b,
    col_c
FROM (
    SELECT
        col_a,
        col_b,
        col_c,
        -- 按A列分组,给组内每行编号
        ROW_NUMBER() OVER (PARTITION BY col_a ORDER BY col_c) AS row_num_group
    FROM your_table -- 替换成你的实际表名
) AS sub_query
-- 保持结果排序逻辑,可根据需求调整排序字段
ORDER BY col_a, col_c;

方法2:同时处理第一列和第二列的重复显示

看你的期望结果,似乎第二列(示例里的数字列)在和第一列组合重复时也想隐藏?比如第一行是"A 2 3",第二行的"A 2"都重复了,只显示"4"。那可以给A列+B列的组合也加一个分组编号:

SELECT
    CASE WHEN row_num_a = 1 THEN col_a ELSE '' END AS col_a,
    CASE WHEN row_num_ab = 1 THEN col_b ELSE '' END AS col_b,
    col_c
FROM (
    SELECT
        col_a,
        col_b,
        col_c,
        -- 按A列分组编号
        ROW_NUMBER() OVER (PARTITION BY col_a ORDER BY col_c) AS row_num_a,
        -- 按A+B列的组合分组编号
        ROW_NUMBER() OVER (PARTITION BY col_a, col_b ORDER BY col_c) AS row_num_ab
    FROM your_table
) AS sub_query
ORDER BY col_a, col_b, col_c;

关键细节说明

  1. PARTITION BY:用来指定分组依据,比如PARTITION BY col_a就是把所有A列值相同的行归为一组。
  2. ORDER BY:控制分组内的行排序逻辑,你可以根据实际需求替换成时间、ID等字段,确保编号顺序符合你的预期。
  3. 空值显示:如果你想显示NULL而非空字符串,把ELSE ''改成ELSE NULL即可,具体看你的查询工具对空值的展示习惯。

用这个方法跑你的示例数据,就能得到你想要的重复值仅显示一次的效果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:22:50