2017-02-08 5 views
0

Я хотел бы скопировать ряд полей, основанных на примере подсчета поля:Копирование данных строк на основе подсчета поля Tsql

ID | Row1 | Row2 | Row3 | count 
----------------------------------------------- 
1 | MR | fred | Flint | 14 

Так скопировать ID 1 строку дополнительно 13 раз, чтобы сделать 14 записей. Затем измените поле счетчика на 1 для каждой скопированной записи и измените исходную строку на 1.

Im думает, что использование CTE и row_number будет работать? но не уверен, как это реализовать.

ответ

2

Ну, вы можете использовать CTE и ROW_NUMBER так:

WITH CTE AS 
(
    SELECT A.*, 
      RN = ROW_NUMBER() OVER(PARTITION BY A.ID ORDER BY A.ID) 
    FROM dbo.YourTable A 
    CROSS JOIN sys.all_objects B 
) 
SELECT ID, 
     Row1, 
     Row2, 
     Row3, 
     1 [count] 
FROM CTE 
WHERE RN <= [count] 
AND [ID] = 1; 

* Отказ от ответственности: Это предполагает, что sys.all_objects имеет больше строк, чем значения count

+0

@SoupOfStars да, я оставил псевдонимы таблиц когда это не было необходимо. Обновлен мой ответ – Lamak

+0

Вы установили ID = 1? Я мог бы иметь любой идентификатор со счетом более 1 – SoupOfStars

+0

Да, потому что это были ваши данные образца. Вы можете, конечно, удалить это условие – Lamak