sql - 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)
解决方案
我认为您只想要一个可更新的 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;
推荐阅读
- python - django安装在虚拟环境中不起作用
- groovy - 如何在 Groovy 中访问循环外的变量
- python - EC2 实例中 Ubuntu 20.04 上的 MySQL 客户端安装错误
- redirect - Next.js 服务器端重定向会覆盖语言环境
- python - pytest 在类的 __init__ 中模拟函数调用
- python - selenium 点击接受风险并继续
- dart - 错误:参数类型“字符串?” 不能分配给参数类型“字符串”,因为“字符串?” 可以为空并且“字符串”不是
- cypress - 为什么期望测试失败?
- mysql - 在 MySql 中通过 Id 和 Rank 获取数据
- android - Android:如何同时支持用户方向和从活动中手动请求的方向