我对SQL很陌生,我认为过了一段时间后我很习惯使用它,但它仍然很难。我想增加ID。我知道我可以使用自动增量,但在这种情况下,id与几个类别有关系所以它必须从不同的数字开始,所以我不能这样做。
表格如下所示:
id category
----------------
1000 1
1000 1
...
2000 2
2000 2
...
我想成功:
id category
------------------
1000 1
1001 1
1002 1
...
2000 2
2001 2
...
我试过了:
UPDATE T1
SET id = CASE
WHEN EXISTS (SELECT id FROM STYLE WHERE T1.id = id)
THEN (SELECT MAX(CAST(id AS INT)) + 1
FROM STYLE
WHERE category = T1.category)
END
FROM STYLE T1
WHERE idStyle = idStyle
但它只是为所有行添加了1。我怎么能一个接一个地去,所以它实际上可以得到递增的最大id?谢谢。
答案 0 :(得分:2)
您可以改为使用row_number()
功能:
select *,
concat(cid, row_number() over (partition by id order by category)-1) as NewId
from style s;
答案 1 :(得分:2)
在实际样本数据的缺席中,这是一个伪sql,但是,像... ...
UPDATE YT
----SELECT NULL as Ihave no context of other fields in your table
SET id = id + ROW_NUMBER() OVER (PARTITION BY category ORDER BY (SELECT NULL)) - 1
FROM YourTable YT;