如何在选择查询中生成自动增量字段

wf *_*ani 71 sql-server auto-increment

例如,我有一个包含2列的表,first_namelast_name带有这些值

Ali           Khani
Elizabette    Amini
Britney       Spears
,...
Run Code Online (Sandbox Code Playgroud)

我想编写一个select生成如下表的查询:

1     Ali           Khani
2     Elizabette    Amini
3     Britney       Spears
,...
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

pet*_*erm 126

如果是MySql,你可以试试

SELECT @n := @n + 1 n,
       first_name, 
       last_name
  FROM table1, (SELECT @n := 0) m
 ORDER BY first_name, last_name
Run Code Online (Sandbox Code Playgroud)

SQLFiddle

而对于SQLServer

SELECT row_number() OVER (ORDER BY first_name, last_name) n,
       first_name, 
       last_name 
  FROM table1 
Run Code Online (Sandbox Code Playgroud)

SQLFiddle

  • 在 MYSQL 中,您可能需要初始化 @n:`SET @n = 0;` (2认同)
  • @FranciscoR 请仔细看看,它已经在子查询 `(SELECT @n := 0)` 中初始化了。这种方法的隐藏之处在于您只有一个语句而不是两个语句,这在客户端代码中禁止使用多个语句时很好。 (2认同)

Joh*_*Woo 30

这是SQL server, Oracle, PostgreSQL支持窗口的功能.

SELECT  ROW_NUMBER() OVER (ORDER BY first_name, last_name)  Sequence_no,
        first_name,
        last_name
FROM    tableName
Run Code Online (Sandbox Code Playgroud)


小智 6

如果您没有自然分区值,并且只需要一个有序数字,而不管分区如何,您只需对常量执行 row_number 即可,在下面的示例中,我刚刚使用了“X”。希望这对某人有帮助

select 
    ROW_NUMBER() OVER(PARTITION BY num ORDER BY col1) as aliascol1, 
    period_next_id, period_name_long
from 
(
  select distinct col1, period_name_long, 'X' as num
  from {TABLE} 
) as x
Run Code Online (Sandbox Code Playgroud)