SQL: обновить зацикливание поля для уникальных значений другого поля - PullRequest
1 голос
/ 07 июля 2011

У меня есть таблица с двумя полями.Я хочу обновить ID_ELEM со счетчиком для каждого уникального значения ID_TASS.Это должна быть правильная таблица вывода:

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

Пожалуйста, любая помощь приветствуется!Спасибо

Ответы [ 3 ]

1 голос
/ 07 июля 2011

очень некрасиво но работает на 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:=@rank+1
where t1.id_tass = T.id_tass
1 голос
/ 07 июля 2011

Я совершенно уверен, что это будет работать:

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) 
1 голос
/ 07 июля 2011

Если хочешь;

ID_TASS ID_ELEM
1       3
1       3
2       2
2       2
3       1
4       4
4       4
4       4
4       4
1       3

Вы можете (т-sql);

update tbl
    set ID_ELEM = (select COUNT(ID_TASS) from tbl where tbl.ID_TASS = T.ID_TASS)
from tbl T
...