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

SSMS中如何按Item分组取MIN(UPC)赋值给值为0的Department字段

原SQL问题说明

你写的语句存在两处问题:

  1. 语法错误:SELECT h.[UPC], h.[Item] 后缺少逗号,执行时会直接报错
  2. 逻辑冗余:外层GROUP BY和count(h.[UPC])的判断完全多余,你已经在子查询中计算好了每个Item分组对应的最小UPC,无需额外聚合判断

正确写法

方案1:窗口函数写法(推荐,SQL Server 2008及以上版本支持,无需关联查询)

SELECT
    [UPC],
    [Item],
    CASE
        WHEN [Department] = 0 THEN MIN([UPC]) OVER (PARTITION BY [Item])
        ELSE [Department]
    END AS Department
FROM [table]
-- 若只需输出原Department为0的处理后结果,取消注释下面的WHERE条件即可匹配你的示例输出
-- WHERE [Department] = 0

方案2:修正你的原有JOIN写法

SELECT
    h.[UPC],
    h.[Item],
    CASE
        WHEN h.[Department] = 0 THEN f.[Min_UPC]
        ELSE h.[Department]
    END AS Department
FROM [table] h
LEFT JOIN (
    SELECT [Item], MIN([UPC]) AS Min_UPC
    FROM [table]
    GROUP BY [Item]
) f ON h.[Item] = f.[Item]
-- 若只需输出原Department为0的处理后结果,取消注释下面的WHERE条件即可匹配你的示例输出
-- WHERE h.[Department] = 0

两种写法针对你的示例数据执行后,Item为a的两条记录Department都会被替换为分组最小UPC值1,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:24:04