如何在选择查询中生成自动增量字段
Posted
技术标签:
【中文标题】如何在选择查询中生成自动增量字段【英文标题】:How to generate auto increment field in select query 【发布时间】:2013-05-09 11:00:23 【问题描述】:例如,我有一个包含 2 列的表,first_name
和 last_name
具有这些值
Ali Khani
Elizabette Amini
Britney Spears
,...
我想编写一个select
查询来生成这样的表:
1 Ali Khani
2 Elizabette Amini
3 Britney Spears
,...
感谢您的帮助。
【问题讨论】:
你使用的是什么关系型数据库? 【参考方案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_name
和last_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
SQLFiddle Demo
【讨论】:
【参考方案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
【讨论】:
以上是关于如何在选择查询中生成自动增量字段的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Access 2010 的选择查询中创建自动增量字段?
在 ClearQuest 中,我如何在 SQL 编辑器中生成一个允许我提示用户输入值的查询?
由于使用自动增量添加到表中,如何使用更新的数据刷新 C# DataTable?