根据其他三个列的出现将列添加为 int 计数。如何使用 ROW_NUMBER 插入?
Add column as int count based on the occurrence of three other columns. How to use ROW_NUMBER with insert?
我需要一个额外的列来计算其他三个列的组合的唯一出现次数。我可以用 ROW_NUMBER 做到这一点,但我想更新 table 来存储这些值。
这个作品看看吧:
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, DocNo, Item ORDER BY EntryUID) AS x,
*
FROM
SourceTable
)
UPDATE SourceTable
SET SourceTable.NEWCount = TableA.x
WHERE SourceTable.EntryUID = TableA.EntryUID
我收到此错误消息:
Msg 4104, Level 16, State 1, Line 17
The multi-part identifier "TableA.EntryUID" could not be bound
假设你是 运行 SQL 服务器,如错误信息所示,你可以简单地使用一个可更新的 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
或者,如果您想使用原来的方法,则需要在 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
我需要一个额外的列来计算其他三个列的组合的唯一出现次数。我可以用 ROW_NUMBER 做到这一点,但我想更新 table 来存储这些值。
这个作品看看吧:
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, DocNo, Item ORDER BY EntryUID) AS x,
*
FROM
SourceTable
)
UPDATE SourceTable
SET SourceTable.NEWCount = TableA.x
WHERE SourceTable.EntryUID = TableA.EntryUID
我收到此错误消息:
Msg 4104, Level 16, State 1, Line 17
The multi-part identifier "TableA.EntryUID" could not be bound
假设你是 运行 SQL 服务器,如错误信息所示,你可以简单地使用一个可更新的 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
或者,如果您想使用原来的方法,则需要在 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