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

SQL Server技术问询:如何隐藏与前一行重复的后续invoice字段值?

实现SQL查询:重复Invoice值仅首次显示

原始数据表

invoiceposition
Cell 1Cell 1
Cell 1Cell 2
Cell 2Cell 3
Cell 1Cell 4

期望查询结果

invoiceposition
Cell 1Cell 1
Cell 2
Cell 4
Cell 2Cell 3

实现思路

核心逻辑是对相同的invoice值,仅在该值首次出现的行显示内容,后续同值行置为空,同时将同一invoice的所有position行集中排列。可以通过窗口函数标记分组内的行号,再根据行号判断是否显示invoice值。

具体SQL实现

通用版本(支持窗口函数的数据库:MySQL 8+/PostgreSQL/SQL Server等)

SELECT
    CASE WHEN row_num = 1 THEN invoice ELSE '' END AS invoice,
    position
FROM (
    SELECT
        invoice,
        position,
        ROW_NUMBER() OVER (PARTITION BY invoice ORDER BY position) AS row_num
    FROM your_table_name
) AS sub
ORDER BY invoice, row_num;

说明

  1. 内层子查询用PARTITION BY invoice按发票分组,ORDER BY position保证同发票下的位置按顺序排列,ROW_NUMBER()为每组内的行分配序号。
  2. 外层通过CASE判断:分组第一行显示发票值,其余行显示空字符串。
  3. 最终排序确保同发票的行集中展示,顺序符合预期。

兼容旧版MySQL(无窗口函数)

如果使用MySQL 5.x及以下版本,可通过变量实现:

SELECT
    CASE WHEN @prev_invoice != invoice THEN invoice ELSE '' END AS invoice,
    position,
    @prev_invoice := invoice
FROM your_table_name, (SELECT @prev_invoice := '') AS init
ORDER BY invoice, position;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:20:23