Tengo una tabla llamada table123 , con aproximadamente 80 filas. Incluye las columnas ' ID ', ' First_Name ', ' Apellido ', ' Job_Title ', '< strong> Salario 'y' Dirección '.

He creado una nueva tabla llamada table987 , que es una copia exacta de table123 . Esto es para no arruinar table123 con ningún comando.

Dentro de table987 , quiero duplicar todos los valores, para que haya 2 copias de cada fila. Entonces, si tengo una fila con ' John ' como ' First_Name ', quiero que la copia duplicada de ' John ' aparezca inmediatamente después en la mesa

Sin embargo, no quiero que la copia duplicada tenga el mismo ' ID '. Cada fila debe tener un ' ID único'. Esencialmente, debe haber 2 de cada registro, pero cada uno debe tener un ' ID ' único.

Intenté usar el siguiente script para duplicar los valores, pero cada duplicado tiene el mismo ' ID ' que el registro original:

INSERT INTO table987 (ID, First_Name, Surname, Job_Title, Salary, Address)
    SELECT ID, First_Name, Surname, Job_Title, Salary, Address
    FROM table123;

¿Existe un script específico que pueda usar para ordenar los duplicados de tal manera?

2
CrashBandicoot 20 mar. 2017 a las 15:56

2 respuestas

La mejor respuesta

Aunque la respuesta ya está aceptada, al ver los comentarios anteriores ( "pero ahora está confundida por todas partes" ), quiero agregar la cláusula ORDER BY a la consulta , que le proporcionará los datos solicitados según lo requerido en los comentarios mencionados anteriormente:

DECLARE @table123 table(ID int, First_Name varchar(100),Surname varchar(100),Job_Title varchar(100),Address varchar(100))
DECLARE @table987 table(ID int, First_Name varchar(100),Surname varchar(100),Job_Title varchar(100),Address varchar(100))
INSERT INTO @table123 
VALUES
    (1,'FName1','Surname1','JobTitle1','Address1'),
    (2,'FName2','Surname2','JobTitle2','Address2'),
    (3,'FName3','Surname3','JobTitle3','Address3'),
    (4,'FName4','Surname4','JobTitle4','Address4'),
    (5,'FName5','Surname5','JobTitle5','Address5')

INSERT INTO @table987
SELECT * FROM (
SELECT * FROM @table123
UNION ALL
SELECT * FROM @table123)result ORDER BY ID

SELECT * FROM @table987;

Salida:

--------------------------------------------------
|ID  First_Name   Surname    Job_Title   Address |
|------------------------------------------------|
|1    FName1      Surname1   JobTitle1   Address1|
|1    FName1      Surname1   JobTitle1   Address1|
|2    FName2      Surname2   JobTitle2   Address2|
|2    FName2      Surname2   JobTitle2   Address2|
|3    FName3      Surname3   JobTitle3   Address3|
|3    FName3      Surname3   JobTitle3   Address3|
|4    FName4      Surname4   JobTitle4   Address4|
|4    FName4      Surname4   JobTitle4   Address4|
|5    FName5      Surname5   JobTitle5   Address5|
|5    FName5      Surname5   JobTitle5   Address5|
-------------------------------------------------- 
1
CrashBandicoot 21 mar. 2017 a las 13:26

Utilice UNION ALL y configure ' ID ' como incremento automático o establezca el valor predeterminado NEWID ()

INSERT  INTO dbo.table987 
    ( First_Name ,
      Surname ,
      Job_Title ,
      Salary ,
      Address
    )
    SELECT  First_Name ,
            Surname ,
            Job_Title ,
            Salary ,
            Address
    FROM    dbo.table123
    UNION ALL
    SELECT  First_Name ,
            Surname ,
            Job_Title ,
            Salary ,
            Address
    FROM    dbo.table123
2
SPnL 22 mar. 2017 a las 05:04