Я не знаю, ищете ли вы общий способ сделать это или метод, специфичный для вашего сценария, но давайте представим, что вы ищете что-то конкретное для вашего сценария.
Так как кажется, что ваша таблица уже имеет последовательно увеличивающийся столбец, мы можем использовать это:
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] таблиц, в которые вы вставляете, являются столбцами идентификаторов, то вы можете пропустить их вставку и позволить идентификатору позаботиться о назначении значений для столбца [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 строки), но у вас есть дублированные значения [id] в tableX, тогда первый подход не будет работать (одна из таблиц получит больше чем 3 строки, и другая таблица получит меньше).
Надеюсь, это даст вам несколько идей для начала. Кстати, подход Томаса отлично подходит, если вы обеспокоены тем, что в значениях столбца [id] могут быть пробелы или дубликаты.