在SQL中使用group在多个自动增量序列之间交替

时间:2015-02-20 22:47:58

标签: sql sql-server

是否可以根据另一列运行不同的自动增量序列?就像左边的桌子而不是右边......

item_id  |  group_id           item_id  |  group_id
____________________           ____________________
    1    |     1                   1    |     1
    2    |     1                   2    |     1
    1    |     2                   3    |     2
    1    |     3                   4    |     3
    3    |     1                   5    |     1
    2    |     3                   6    |     3

我怀疑这是不可能的,但也许有办法做到这一点?

感谢您的关注。

编辑:对于2012 SQL Server

3 个答案:

答案 0 :(得分:2)

Row_Number partition by看起来应该有效

select Row_number() over(partition by group_id order by (select null)) item_id,
       Group_id
From   Yourtable

答案 1 :(得分:0)

不需要。

只需使用以下查询。

SELECT item_id, ROW_NUMBER() OVER(ORDER BY group_id)
FROM table_name

See: Row_Number(), Rank(),Dense_Rank()

Similar Example

答案 2 :(得分:0)

根据M.Ali提出的方向,我开始查看计算列,这些列也没有成功,但确实让我想到了另一种方法。我最终得到了以下解决方案:远非优雅,但它有效...

INSERT INTO tst (group_id, item_id) VALUES (8,
CASE WHEN NOT EXISTS 
  (SELECT TOP(1) item_id FROM tst WHERE group_id=8 ORDER BY item_id DESC) 
   THEN 100 
  ELSE 
  (SELECT TOP(1) item_id+1 FROM tst WHERE group_id=8 ORDER BY item_id DESC) END)

如果这让您考虑更好的解决方案,请分享:)

感谢所有花时间回应的人。