如果我有一个带X寄存器的表,(这里是X = 6)
id field
--------
1 1232
2 346
3 349
4 465
5 68
6 545
如何在表格中插入n(n = 3)个第一个元素,然后将其余的X-n插入另一个
table1
id field
--------
1 1232
2 346
3 349
table2
id field
--------
1 465
2 68
3 545
答案 0 :(得分:2)
With RankedItems As
(
Select id, field
, Row_Number() Over ( Order By id ) As Num
From Registers
)
Insert Table1( id, field )
Select id, field
From RankedItems
Where Num <= 3
With RankedItems As
(
Select id, field
, Row_Number() Over ( Order By id ) As NewId
From Registers
)
Insert Table2( id, field )
Select Num - 3, field
From RankedItems
Where Num > 3
答案 1 :(得分:1)
我不知道你是在寻找一种通用的方法,还是一种特定于你的场景的方法,但我们假设你正在寻找特定于你的场景的东西。
由于您的表似乎已连续增加列,我们可以使用:
INSERT INTO Table1
SELECT [ID], [Field]
FROM [TableX]
WHERE [ID] <= 3
INSERT INTO Table2
SELECT [ID] - 3, [Field]
FROM [TableX]
WHERE [ID] >= 4
但这确实是一个非常具体的答案。更一般地,有不同的方法从表中选择特定数量的行。例如,另一种方法是:
INSERT INTO Table1
SELECT TOP 3 [ID],[Field]
FROM [TableX]
ORDER BY [ID]
INSERT INTO Table2
SELECT TOP 3 [ID] - 3, [Field]
FROM [TableX]
ORDER BY [ID] DESC
另外,如果要插入的表的[id]列是标识列,那么您可以跳过插入它们并让identity识别为[id]列分配值,例如:
INSERT INTO Table1 ([Field])
SELECT TOP 3 [Field]
FROM [TableX]
ORDER BY [ID]
INSERT INTO Table2 ([Field])
SELECT TOP 3 [Field]
FROM [TableX]
ORDER BY [ID] DESC
还有其他方法,但这些方法最简单。它们的适用性取决于您的具体情况。例如,如果你需要一个固定数量的行在table1和table2中(你特别想要3行),但是你在tableX中有重复的[id]值,那么第一种方法将无法工作(其中一个表将获得超过3行,而另一个表会少一些。)
我希望这会给你一些想法。顺便提一下,如果您担心[id]列的值可能存在间隙或重复,那么Thomas的方法非常出色。