我在SQL表中有3列: 例如:
|| ID || Name || Position ||
1 Robert 1
2 Superman 2
3 Spiderman 1
. . .
. . .
1080 Herry 1
我希望从同一个表中选择数据,并在以下命令的帮助下插入整数相同的表:
INSERT INTO Table1 (Name, Position)
SELECT NAME, Position FROM Table1 WHERE ID IN (2,3)
新创建的行的值(Table1.Position)不应与旧的相同,但只要调用命令就从1开始,每次添加新行时增加(1)。 对于前者:当我打电话给跟随时:
INSERT INTO Table1 (Name, Position)
SELECT NAME, Position FROM Table1 WHERE ID IN (2,3)
表格应如下所示
|| ID || Name || Position ||
1 Robert 1
2 Superman 2
3 Spiderman 1
. . .
. . .
1080 Herry 1
1081 Superman 1
1082 Spiderman 2
位置值可以是1到n之间的任何值。其中n取决于否。使用相同命令插入的行增加1并且每次再调用一个新命令,Position / n值应从1开始并且不依赖于最近/旧/最后一行位置值。
答案 0 :(得分:2)
我假设您希望每次插入数据时将位置限制为2
为此,这里有一些方法使用row_number()
函数
INSERT INTO Table1 (Name, Position)
SELECT NAME, 1+((row_number() over(order by id)-1)%2) Position
FROM Table1 WHERE ID IN (2,3)
第二个是从 SQL Server 2012 +
创建序列create sequence dbo.sq
start with 1
increment by 1
minvalue 1
maxvalue 2
cycle
AND ,通过调用NEXT VALUE FOR
函数
INSERT INTO Table1 (Name, Position)
SELECT NAME, next value for dbo.sq Position
FROM Table1 WHERE ID IN (2,3)
编辑:如果您只想给名字指定位置,请使用row_number()
订购...
SELECT NAME, row_number() over (order by (select 1)) Position
FROM Table1
WHERE ID IN (2,3)
答案 1 :(得分:0)
INSERT INTO Table1 (Name, Position) (
SELECT Name, row_number() over(order by Position) Table1
WHERE Position IN (2, 3)
)
答案 2 :(得分:0)
您可以将ID列设为IDENTITY(1,1)。这样表格的每个条目都以1开头并以1递增。