我有一個包含兩個文件的表。我想用計數器更新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