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

如何修改WITH CTE AS语句,实现含空白Customer的StackCustomerAltID有序更新

空白值排序问题解决方案

要实现非空Customer记录排序在前、空白Customer记录排序在后的效果,只需要调整窗口函数中ORDER BY的排序规则即可,核心是通过条件判断给空白记录设置更低的排序优先级。

如果你的需求还是仅更新DelFlg=0的记录,不要删除WHERE子句中的DelFlg=0条件,仅移除Customer <> ''的过滤条件即可。

修改后的完整代码如下:

WITH CTE AS(
    SELECT StackCustomerAltID,
           ROW_NUMBER() OVER (
               ORDER BY 
                  -- 非空Customer记录优先排序
                  CASE WHEN Customer IS NULL OR Customer = '' THEN 1 ELSE 0 END,
                  Customer ASC
           ) AS RN
    FROM dbo.StackCustomer 
    WHERE DelFlg = 0 -- 保留原逻辑中仅更新未删除记录的限制,不需要可删除
)
UPDATE CTE
SET StackCustomerAltID = RN;

代码逻辑说明

  • CASE WHEN Customer IS NULL OR Customer = '' THEN 1 ELSE 0 END会将所有非空的Customer记录标记为0,空白(含NULL值和空字符串)记录标记为1,排序时0在前1在后,保证所有非空记录排在空白记录前面
  • 非空记录内部仍按原有逻辑以Customer字段升序排序
  • 空白记录之间的排序顺序如果有自定义要求,可以在ORDER BY最后追加对应字段规则,比如按主键ID升序就加, ID ASC即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:15:07