首页 > 解决方案 > SQL Server 2016:在更新记录时分组

问题描述

我有一个场景,我需要针对产品确定每个客户/业务组合的保证金类型 - 这意味着客户/业务组合的利润率最高的产品应该被标识为“高”保证金类型。具有相同组合的所有其他产品应标识为低。所以,我需要一个 SQL 来相应地更新 MARGIN_TYPE 列。

我尝试做这样的事情,但不明白如何按客户/业务组合对其进行分组。任何帮助将不胜感激。谢谢!

UPDATE ORDER_TABLE
SET MARGIN_TYPE = 'High'
where MARGIN = (SELECT MARGIN FROM (SELECT MAX(MARGIN) FROM ORDER_TABLE) AS 
MARGIN) 

在此处输入图像描述

标签: sqlsql-servertsqlsql-updatewindow-functions

解决方案


认为您只想要一个可更新的 CTE:

WITH CTE AS(
    SELECT Customer,
           Margin,
           MarginType,
           MAX(Margin) OVER (PARTITION BY Customer) AS MaxMargin
    FROM dbo.YOurTable)
UPDATE CTE
SET MarginType = CASE Margin WHEN MaxMargin THEN 'High' ELSE 'Low' END;

推荐阅读