根据其他三个列的出现将列添加为int计数如何在插入时使用ROW_NUMBER?

问题描述

我需要一个额外的列,该列计算其他三个列的组合的唯一出现次数。我可以用ROW_NUMBER做到这一点,但想更新表以存储值。

这可以看到它:

SELECT
    ROW_NUMBER() OVER (PARTITION BY EntryDate,DocNo,Item ORDER BY EntryUID) AS x,*
FROM
    SourceTable

这不适用于更新它:

WITH TableA AS 
(
    SELECT
        ROW_NUMBER() OVER (PARTITION BY EntryDate,*
    FROM 
        SourceTable
)
UPDATE SourceTable
SET SourceTable.NEWCount = TableA.x
WHERE SourceTable.EntryUID = TableA.EntryUID

我收到此错误消息:

Msg 4104,第16级,状态1,第17行
不能绑定多部分标识符“ TableA.EntryUID”

解决方法

或者,如果您想使用原始方法,则需要在UPDATE语句中包含CTE-像这样:

WITH TableA AS 
(
    SELECT
        ROW_NUMBER() OVER (PARTITION BY EntryDate,DocNo,Item ORDER BY EntryUID) AS x,*
    FROM 
        SourceTable
)
UPDATE src
SET NEWCount = TableA.x
FROM SourceTable src
INNER JOIN TableA ON src.EntryUID = TableA.EntryUID
,

假设您正在运行SQL Server(如错误消息所示),则只需使用可更新的CTE:

with cte as (
    select newcount,row_number () over(partition by entrydate,docno,item order by entryuid ) as rn
    from sourcetable
)
update cte set newcount = rn