使用新的ID计数器值选择多行

时间:2014-11-11 12:40:44

标签: sql sql-server-2008

我有一个包含250行的表SESSIONVARIABLES。表格列是

USERGROUP, ID, DESCRIPTION

我想创建一个SELECT语句(在INSERT中使用SESSIONVARIABLES),为每个不同的USERGROUP返回一行(将有13个) ID为当前最大值加上每行递增的值

理想情况下像

251 | UserGroup1
252 | UserGroup9
253 | UserGroup25
254 | UserGroup33
255 | UserGroup44
256 | UserGroup100

依旧......

2 个答案:

答案 0 :(得分:3)

从当前的最大ID:

开始运行
select
    max(USERGROUP),
    row_number() over (order by USERGROUP) + (select max(id) from SESSIONVARIABLES)
from SESSIONVARIABLES
group by USERGROUP

答案 1 :(得分:1)

下面的代码计算当前表的最大值,然后使用ROW_NUMBER确定下一个连续的id值。

DECLARE @SessionVariables TABLE (USERGROUP VARCHAR(100), ID INT, DESCRIPTION VARCHAR(100))
INSERT @SessionVariables VALUES
    ('UserGroup1', 250, NULL),
    ('UserGroup9', 249, NULL),
    ('UserGroup25', 248, NULL),
    ('UserGroup33', 247, NULL),
    ('UserGroup44', 246, NULL),
    ('UserGroup100', 245, NULL)

--INSERT @SessionVariables (ID, USERGROUP)
    SELECT 
        MaxID.ID + ROW_NUMBER() OVER (ORDER BY SV.USERGROUP) AS [ID],
        SV.USERGROUP
    FROM @SessionVariables SV
        CROSS JOIN (SELECT MAX(ID) FROM @SessionVariables) MaxID (ID)
    GROUP BY
        SV.USERGROUP,
        MaxID.ID

这会产生输出:

ID                   USERGROUP
-------------------- ------------------
251                  UserGroup1
252                  UserGroup100
253                  UserGroup25
254                  UserGroup33
255                  UserGroup44
256                  UserGroup9