3

我想要做的是以下几点:我有一个有多位作者的表SingleAuthor。此表有时会多次包含同一作者。我想要做的是更新表格并添加作者特定编号。例如:

sat_name -> sat_rowNumber
Freddy -> 1
Author2 -> 2
Freddy -> 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_rowNumbernewTable.numb当前行sat_name等于sat_name.newTable

关于如何在更新语句中引用要更新的表的任何见解?

4

1 回答 1

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()对聚合值所做的操作。

于 2012-12-20T15:14:47.447 回答