SQL Server 2016实现重复分类列仅首行显示的查询方法
SQL Server 2016 实现分类首行显示其余为空的查询优化
需求:从Food表提取物品名称(Item_Name)及分类(Category)信息,要求同一分类仅在该类别的首行显示,其余行的分类列留空,语法需简洁以便复用。
现有查询语句
SELECT DISTINCT Food.Item_Name, Food.Category FROM Food
当前查询结果
| Item_Name | Category |
|---|---|
| Banana | Fruit |
| Apple | Fruit |
| Carrot | Vegetable |
| Potato | Vegetable |
期望结果
| Item_Name | Category |
|---|---|
| Banana | Fruit |
| Apple | |
| Carrot | Vegetable |
| 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
相关产品推荐
相关产品推荐

