【问题标题】:How to generate auto increment field in select query如何在选择查询中生成自动增量字段
【发布时间】:2013-05-09 11:00:23
【问题描述】:

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

Ali           Khani
Elizabette    Amini
Britney       Spears
,...

我想编写一个select 查询来生成这样的表:

1     Ali           Khani
2     Elizabette    Amini
3     Britney       Spears
,...

感谢您的帮助。

【问题讨论】:

  • 你使用的是什么关系型数据库?

标签: sql-server auto-increment


【解决方案1】:

如果是MySql你可以试试

SELECT @n := @n + 1 n,
       first_name, 
       last_name
  FROM table1, (SELECT @n := 0) m
 ORDER BY first_name, last_name

SQLFiddle

对于 SQLServer

SELECT row_number() OVER (ORDER BY first_name, last_name) n,
       first_name, 
       last_name 
  FROM table1 

SQLFiddle

【讨论】:

  • 如果我想从table1 中选择所有列而不是first_namelast_name,我该如何引用所有列?尝试SELECT @n := @n + 1 n, * 不起作用
  • 答案是SELECT @n := @n + 1 n, table1.*
  • 在MYSQL中你可能需要初始化@n:SET @n = 0;
  • @FranciscoR 请仔细看一下,它已经在子查询(SELECT @n := 0) 中初始化了。这种方法的隐藏优点在于您只有一个语句而不是两个语句,这在您的客户端代码中禁止多个语句时很好。
【解决方案2】:

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

SELECT  ROW_NUMBER() OVER (ORDER BY first_name, last_name)  Sequence_no,
        first_name,
        last_name
FROM    tableName

【讨论】:

    【解决方案3】:

    如果您没有自然分区值并且只想要一个有序数字而不管分区如何,您可以只对常量执行 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
    

    【讨论】:

      【解决方案4】:
      DECLARE @id INT 
      SET @id = 0 
      UPDATE cartemp
      SET @id = CarmasterID = @id + 1 
      GO
      

      【讨论】:

        猜你喜欢
        • 2015-06-27
        • 2019-07-26
        • 2012-03-19
        • 2018-12-12
        • 1970-01-01
        • 2013-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多