我有一個SQL表是這樣的:更新從內部查詢的表僅使用所述第一值
表用戶
Id Name Country rank total
+----+---------------+---------------+-----------------+-------------+
1 John Canada
2 Kate Canada
3 Mark Canada
4 Max Argentina
5 Sam Argentina
6 Stacy China
7 Ken China
8 jack China
9 Don China
我想如下填充rank
和total
值:
Id Name Country rank total
+----+---------------+---------------+-----------------+-------------+
1 John Canada 1 3
2 Kate Canada 2 3
3 Mark Canada 3 3
4 Max Argentina 1 2
5 Sam Argentina 2 2
6 Stacy China 1 4
7 Ken China 2 4
8 jack China 3 4
9 Don China 4 4
總數基本上是每個國家的總數,排名僅僅是一個數1,2,3,4 ....在該國(它重置爲每一個)。
要做到這一點我試過如下:
update Users
set rank=u.tempRank, total=u.tempTotal
from
(select *,
row_number() over (partition by [Country] order by newid()) as tempRank,
count(*) over (partition by [Country]) as tempTotal
from Users) as u
然而rank
和total
都是平等的第一tempRank和tempTotal,我得到這個表
Id Name Country rank total
+----+---------------+---------------+-----------------+-------------+
1 John Canada 1 3
2 Kate Canada 1 3
3 Mark Canada 1 3
4 Max Argentina 1 3
5 Sam Argentina 1 3
6 Stacy China 1 3
7 Ken China 1 3
8 jack China 1 3
9 Don China 1 3
如果我嘗試調試單獨的內部查詢:
select *,
row_number() over (partition by [Country] order by newid()) as tempRank,
count(*) over (partition by [Country]) as tempTotal
from Users
不起來約會,只是選擇,我得到正確的結果:
Id Name Country tempRank tempTotal
+----+---------------+---------------+-----------------+-------------+
1 John Canada 1 3
2 Kate Canada 2 3
3 Mark Canada 3 3
4 Max Argentina 1 2
5 Sam Argentina 2 2
6 Stacy China 1 4
7 Ken China 2 4
8 jack China 3 4
9 Don China 4 4
所以,問題與更新,它只是採取的第一行和更新基礎上的所有表。
如何遍歷每一行來更新它?