0

我有这样的声明:

declare @max int
@max = 1
SELECT @max, t1.col1, t1.col2
FROM table1 t1

这会给我结果:

1 a a
1 b b
1 c c

我想得到这种结果

1 a a
2 b b
3 c c

我怎样才能达到这个结果?

我试图做如下:

@max = 1
SELECT @max, t1.col1, t1.col2
FROM table1 t1
WHERE @max = @max + 1

但是没有成功,有人可以帮我吗?谢谢!

PS。我必须使用 @max 作为变量 - 我不能使用 Identity 或 AUTOINCREMENT 列

4

2 回答 2

7

使用 row_number() 函数。

SELECT row_number() over (order by t1.col1, t1.col2),t1.col1, t1.col2
FROM table1 t1

从固定值开始:

declare @your_number int
set @your_number = 24353

SELECT @your_number + row_number() over (order by t1.col1, t1.col2) AS num,t1.col1, t1.col2
FROM table1 t1
于 2013-10-17T12:16:33.330 回答
2

尝试这个:

with cte as 
(
  SELECT t1.col1, t1.col2, ROW_NUMBER() by (order by t1.col1, t1.col2) as RowNumber
  FROM table1 t1
)

select c.RowNumber, c.col1, c.col2
from cte c

row_number()函数将返回从 1 开始的行号。

于 2013-10-17T12:19:32.927 回答