SQL Server中基于commission列生成commission2列的实现需求
在SQL Server中生成commission2列的解决方案
实现思路
结合CountCustomer字段和同一客户下的commission分布情况,通过窗口函数获取分组内的数值极值判断场景,再用CASE语句匹配规则计算目标列。
完整SQL代码
假设你的表名为customer_commission,客户唯一标识字段为customer_id(用于关联同一客户的不同品牌记录),代码如下:
SELECT customer_id, CountCustomer, commission, CASE -- 规则1:CountCustomer = 1的场景 WHEN CountCustomer = 1 THEN CASE WHEN commission <= 0 THEN 0 ELSE commission END -- 规则2:CountCustomer = 2的场景 WHEN CountCustomer = 2 THEN CASE -- 两个commission都<0 → 置为0 WHEN MAX(commission) OVER (PARTITION BY customer_id) < 0 THEN 0 -- 两个commission都>0 → 保留原数值 WHEN MIN(commission) OVER (PARTITION BY customer_id) > 0 THEN commission -- 一正一负 → 两行均取分组内的正数值(若需转为各自绝对值,可替换为ABS(commission)) ELSE MAX(commission) OVER (PARTITION BY customer_id) END END AS commission2 FROM customer_commission;
代码说明
- 窗口函数作用:
MAX(commission) OVER (PARTITION BY customer_id)和MIN(commission) OVER (PARTITION BY customer_id)用于快速判断同一客户下的commission分布:- 最大值<0 → 所有值为负
- 最小值>0 → 所有值为正
- 其余情况 → 存在正负两种值
- 分支匹配规则:
CountCustomer=1时,直接根据当前行commission值判断是否置0CountCustomer=2时,通过分组极值匹配对应场景,执行规则
内容的提问来源于stack exchange,提问作者Veli K
相关产品推荐
相关产品推荐

