首页 > 解决方案 > 需要使用更新通过以下查询获取的数据的备用行。无法在更新语句ms sql server中使用寡妇功能

问题描述

我需要以下查询的帮助:我想在给定某些条件的情况下更新表的每个备用行,其中包括多个表我无法在更新下使用 windows 功能如何修改此查询以使其工作

UPDATE loanacct 
    SET 
        collection_officer_no = 
        (
                CASE
                    WHEN
                        ROW_NUMBER()OVER (ORDER BY acctrefno)  %2 = 0 
                    THEN 
                        4
                    ELSE
                        7
                    END
        )

WHERE acctrefno in 
    (
    SELECT 
    [acctrefno]
FROM 
    [NLS].[dbo].[loanacct] L
    INNER JOIN nlsusers U ON U.userno = L.collection_officer_no
WHERE
    U.username like 'house' AND 
    L.loan_group_no in ( '2', '4', '5') AND`enter code here`
    L.days_past_due > 25 AND  
    status_code_no = 0) 

标签: sqlsql-server

解决方案


您可以使用可更新的 CTE。这是伪 SQL,但应该让您走上正确的道路:

WITH CTE AS(
    SELECT {YourColumns},
           ROW_NUMBER() OVER (/* PARTITION BY ??? */ ORDER BY {Column} AS RN
    FROM YourTable
    WHERE ...
    )
UPDATE CTE
SET ...
WHERE RN % 2 = 0;

推荐阅读