89

例如,我有一个有 2 列的表,first_name并且last_name有这些值

Ali           Khani
Elizabette    Amini
Britney       Spears
,...

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

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

谢谢你的帮助。

4

4 回答 4

160

如果是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

于 2013-05-15T01:53:31.303 回答
36

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

SELECT  ROW_NUMBER() OVER (ORDER BY first_name, last_name)  Sequence_no,
        first_name,
        last_name
FROM    tableName
于 2013-05-15T01:53:51.647 回答
4

如果您没有自然分区值并且只想要一个有序数字而不管分区如何,您可以只对常量执行 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
于 2018-02-15T13:19:37.927 回答
0
DECLARE @id INT 
SET @id = 0 
UPDATE cartemp
SET @id = CarmasterID = @id + 1 
GO
于 2015-10-08T11:57:12.700 回答