Index Columns Text New Index
===========================================
1 ISOCountry TH 1
-------------------------------------------
2 Country Thailand 1
-------------------------------------------
3 Region Asia 1
-------------------------------------------
4 Date 12/31/2014 1
-------------------------------------------
5 Holiday New Years Eve 1
-------------------------------------------
7 ISOCountry DE 2
-------------------------------------------
8 Country Germany 2
-------------------------------------------
9 Region EMEA 2
-------------------------------------------
10 Date 12/31/2014 2
-------------------------------------------
11 Holiday New Years Eve 2
-------------------------------------------
13 ISOCountry DK 3
-------------------------------------------
14 Country Denmark 3
-------------------------------------------
15 Region EMEA 3
-------------------------------------------
16 Date 12/31/2014 3
-------------------------------------------
17 Holiday New Years Eve 3
-------------------------------------------
我有一个如上所述的专栏。我需要SQL Server中的循环/游标,以便每次“列”列更改为ISOCountry时,新索引列必须递增1. 这意味着对于第1行到第5行,“新建索引”列具有值1,对于第7行到第11行,新索引值必须为2,依此类推。对于其他列,“列”更改为ISO国家/地区的新指数值必须更改为2。我将在所有
中拥有大约10000行我们将非常感谢这方面的任何帮助。感谢
答案 0 :(得分:1)
为什么要使用循环?只需将newindex
值设置为ID较低的isocountry
条记录。您可以使用相关子查询(以及其他方法)执行此操作:
update table t
set newindex = (select count(*)
from table t2
where t2.columns = 'IsoCountry' and
t2."index" <= t."index"
);
答案 1 :(得分:1)
这将根据当前记录之前的ISOCountry记录数设置newIndex:
UPDATE A
SET newIndex = B.newIndex
FROM [myTable] A
CROSS APPLY (
SELECT COUNT(*) [newIndex]
FROM [myTable] X
WHERE X.[Index] <= A.[Index]
AND X.[Columns] = 'ISOCountry'
) B