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

SQL Server 2016实现重复分类列仅首行显示的查询方法

SQL Server 2016 实现分类首行显示其余为空的查询优化

需求:从Food表提取物品名称(Item_Name)及分类(Category)信息,要求同一分类仅在该类别的首行显示,其余行的分类列留空,语法需简洁以便复用。

现有查询语句

SELECT DISTINCT
    Food.Item_Name,
    Food.Category
FROM
    Food

当前查询结果

Item_NameCategory
BananaFruit
AppleFruit
CarrotVegetable
PotatoVegetable

期望结果

Item_NameCategory
BananaFruit
Apple
CarrotVegetable
Potato

解决方案

利用SQL Server的窗口函数ROW_NUMBER(),按分类分组后给每组内的行编号,仅保留首行的分类值,其余行置空。优化后的查询语句如下:

SELECT
    Item_Name,
    CASE WHEN ROW_NUMBER() OVER (PARTITION BY Category ORDER BY Item_Name) = 1 THEN Category ELSE '' END AS Category
FROM
    Food
GROUP BY Category, Item_Name
ORDER BY Category, Item_Name

逻辑说明

  • PARTITION BY Category:按分类分组,每组单独计算行号
  • ORDER BY Item_Name:定义每组内行的排序规则(可根据需求调整排序字段)
  • CASE语句判断:当行号为1时显示分类名,否则显示空字符串
  • GROUP BY确保结果去重,替代原查询的DISTINCT,逻辑更清晰

执行上述语句后,将得到与期望一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:56:08