Вставьте 'n' первых элементов таблицы в другую и Xn в другую таблицу SQL Server - PullRequest
0 голосов
/ 27 февраля 2011

Если у меня есть таблица с 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

Ответы [ 2 ]

2 голосов
/ 27 февраля 2011
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 голос
/ 27 февраля 2011

Я не знаю, ищете ли вы общий способ сделать это или метод, специфичный для вашего сценария, но давайте представим, что вы ищете что-то конкретное для вашего сценария.

Так как кажется, что ваша таблица уже имеет последовательно увеличивающийся столбец, мы можем использовать это:

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] могут быть пробелы или дубликаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...