我要做的是以下内容:
我有一个包含多位作者SingleAuthor
的表格。该表有时不止一次包含同一作者。我想要做的是更新表并添加作者特定的号码。例如:
sat_name - > sat_rowNumber
弗雷迪 - > 1
作者2 - > 2
弗雷迪 - > 1
AnotherOne - > 3
我已经有了查询给我这个结果:
SELECT ROW_NUMBER() OVER( ORDER BY sat_name),
sat_name
FROM SingleAuthor
GROUP BY sat_name
问题是,我想在sat_rowNumber
列中插入此数据。
我带着这个问题来到这里:
UPDATE SingleAuthor SET sat_rowNumber = ( SELECT newTable.numb
FROM(
SELECT ROW_NUMBER() OVER( ORDER BY sat_name) as numb, sat_name
FROM SingleAuthor
GROUP BY sat_name) AS newTable
WHERE newTable.sat_name =) -- the current row in the to be updated table
我想要做的是将SingleAuthor
表的sat_rowNumber
更新为newTable.numb
,其中当前行sat_name
等于sat_name
中的newTable
{1}}。
有关如何在update语句中引用要更新的表的任何见解?
答案 0 :(得分:6)
您的问题的答案是:
where newTable.sat_name = SingleAuthor.sat_name
它将引用外部表,因为子查询中的那个超出了范围。但是,如果这是一个问题,您可以给子查询中的一个别名。
我认为您可以更有效地编写查询:
with toupdate as (
select sa.*, dense_rank() over (order by sat_name) as newVal
from SingleAuthor sa
)
update toupdate
set sat_RowNumber = newval
dense_rank()
函数与汇总值row_number()
完全相同。