首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:更新在另一个字段的唯一值上循环的字段

问SQL:更新在另一个字段的唯一值上循环的字段
EN

Stack Overflow用户
提问于 2011-07-07 19:14:27
回答 3查看 1.1K关注 0票数 1

我有一张有两个栏目的桌子。我想为ID_TASS的每个唯一值更新一个计数器来更新ID_ELEM。这应该是正确的输出表:

代码语言:javascript
复制
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

请不要客气,欢迎任何帮助!谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-07 20:53:43

我完全确定它是否会起作用:

代码语言:javascript
复制
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

或者是这样的:

代码语言:javascript
复制
UPDATE tbl
SET ID_ELEM = ROW_NUMBER() OVER (PARTITION BY ID_TASS) 
票数 1
EN

Stack Overflow用户

发布于 2011-07-07 19:28:32

如果你想的话;

代码语言:javascript
复制
ID_TASS ID_ELEM
1       3
1       3
2       2
2       2
3       1
4       4
4       4
4       4
4       4
1       3

你可以(t-sql);

代码语言:javascript
复制
update tbl
    set ID_ELEM = (select COUNT(ID_TASS) from tbl where tbl.ID_TASS = T.ID_TASS)
from tbl T
票数 1
EN

Stack Overflow用户

发布于 2011-07-07 20:08:14

非常难看,但可以在mysql上运行

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6609720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档