我有一个包含两个文件的表。我想用计数器更新ID_ELEM
,每个唯一值为ID_TASS
。 这应该是正确的输出表:SQL:更新字段在另一个字段的唯一值上循环
ID_TASS, ID_ELEM
1 , POL_1
1 , POL_2
1 , POL_3
2 , POL_1
2 , POL_2
3 , POL_1
4 , POL_1
4 , POL_2
4 , POL_3
4 , POL_4
请,任何帮助,欢迎!谢谢
我有一个包含两个文件的表。我想用计数器更新ID_ELEM
,每个唯一值为ID_TASS
。 这应该是正确的输出表:SQL:更新字段在另一个字段的唯一值上循环
ID_TASS, ID_ELEM
1 , POL_1
1 , POL_2
1 , POL_3
2 , POL_1
2 , POL_2
3 , POL_1
4 , POL_1
4 , POL_2
4 , POL_3
4 , POL_4
请,任何帮助,欢迎!谢谢
我都知道,如果它的工作:
UPDATE tbl
SET ID_ELEM = rn
FROM
(SELECT ctid AS id
, ROW_NUMBER() OVER (PARTITION BY ID_TASS) AS rn
FROM tbl
) AS tmp
WHERE tbl.ctid = tmp.ctid
或也许这:
UPDATE tbl
SET ID_ELEM = ROW_NUMBER() OVER (PARTITION BY ID_TASS)
非常难看,但工程上的MySQL
SET @rank:=0;
update t1, (select id_tass, count(*) as c
from t1
group by id_tass) T
set
t1.t1.id_elem = case
when @rank >= T.c then
@rank:=0
else @rank
end,
t1.id_elem = @rank:[email protected]+1
where t1.id_tass = T.id_tass
我使用PostgreSQL,我不知道“SET @rank”的等价物。任何帮助?谢谢 – albus2011
感谢ypercube !!!!!这很有效,但有一点改变:UPDATE test_refr set id_elem = v_test_refr.rn FROM(SELECT row_number()over(partition by id_tass)AS rn,objectid FROM test_refr)AS v_test_refr WHERE test_refr.objectid = v_test_refr.objectid; – albus2011
@ albus2011:你使用哪个Postgres版本?它是“objectid”还是“oid”? –
Postgres 8.4 - 但这是一个从shapefile导入的空间表(在这种情况下,我使用objectid作为主键字段) – albus2011