为具有指定值的行分配一个连续的 ID
assign a consecutive ID for rows with specified value
在我的例子中,如何为具有指定值的行分配一个连续的 ID Identifier
,最好按 Value
升序排列?
table 应该是这样的:
Identifier ID Name Value
identifier1 1 example1 value100
identifier1 2 example2 value200
identifier1 3 example3 value400
identifier2 1 example3 value100
identifier2 2 example5 value500
identifier3 1 example11 value600
identifier3 2 example12 value800
到目前为止,我的代码只给出了整个 Table #Temp
:
的连续 ID
CREATE TABLE #Temp (
Identifier NVARCHAR(256)
, ID INT NOT NULL IDENTITY( 1, 1)
, Name NVARCHAR(256)
, Value NVARCHAR(256)
)
WHILE Condition
BEGIN
SELECT @Identifier = Identifier (..)
SELECT @Table = Table (..)
SET @Sql = N'
SELECT
''' + @Identifier + '''
, Name
, MAX(Value)
FROM ' + @Table+ ' WITH (NOLOCK)
GROUP BY Name
ORDER BY Name
'
INSERT INTO #Temp
EXEC ( @Sql )
END
您似乎在尝试将连续的 ID 分配给具有相同标识符的每组行。您只需要 ROW_NUMBER()
使用 ROW_NUMBER()
添加 ID
SELECT ID = ROW_NUMBER() OVER (PARTITION BY Identifier ORDER BY [Value]),*
From YourTable
在我的例子中,如何为具有指定值的行分配一个连续的 ID Identifier
,最好按 Value
升序排列?
table 应该是这样的:
Identifier ID Name Value
identifier1 1 example1 value100
identifier1 2 example2 value200
identifier1 3 example3 value400
identifier2 1 example3 value100
identifier2 2 example5 value500
identifier3 1 example11 value600
identifier3 2 example12 value800
到目前为止,我的代码只给出了整个 Table #Temp
:
CREATE TABLE #Temp (
Identifier NVARCHAR(256)
, ID INT NOT NULL IDENTITY( 1, 1)
, Name NVARCHAR(256)
, Value NVARCHAR(256)
)
WHILE Condition
BEGIN
SELECT @Identifier = Identifier (..)
SELECT @Table = Table (..)
SET @Sql = N'
SELECT
''' + @Identifier + '''
, Name
, MAX(Value)
FROM ' + @Table+ ' WITH (NOLOCK)
GROUP BY Name
ORDER BY Name
'
INSERT INTO #Temp
EXEC ( @Sql )
END
您似乎在尝试将连续的 ID 分配给具有相同标识符的每组行。您只需要 ROW_NUMBER()
使用 ROW_NUMBER()
添加 IDSELECT ID = ROW_NUMBER() OVER (PARTITION BY Identifier ORDER BY [Value]),*
From YourTable