问题描述
我需要一个额外的列,该列计算其他三个列的组合的唯一出现次数。我可以用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