none
Acomodar Resultado RRS feed

  • Pregunta

  • Hola que tal ,  tengo el siguiente problema en una consulta , no se me ocurre como hacerlo la verdad

    tengo la siguiente tabla

    

    Son tablas diferentes el contenido naranja es una tabla y la azul es otra , lo que se prende hacer es rellenar la tabla de la derecha (azul ) con los datos de la naranja , osea que cuando encuentre las mismas fechas se conserven los de la tabla azul sin poner lo de las naranjas, otra cosa mas seria ya que no existe Nombre2 ( Tabla naranja) se ponga en la tabla azul 

    se lo agradecería que me ayudaran como se podría hacer 


    Pregunta

    martes, 20 de agosto de 2019 22:40

Todas las respuestas

  • Hola Dave2203:

    create table Fan1 (id int, name varchar(25), sensor varchar(25), [value] int, [date] datetime)
    go
    create table Fan2 (id int, name varchar(25), sensor varchar(25), [value] int, [date] datetime)
    go
    insert into fan1
     (id, name, sensor, [value],  [date])
     values
     (2444,'Nombre 1', 'Fan Status', 77, '20190819 19:19:10.500'),
     (2444,'Nombre 1', 'Fan Status', 77, '20190819 19:19:15.500'),
     (2444,'Nombre 1', 'Fan Status', 76, '20190819 19:19:20.500'),
     (2444,'Nombre 1', 'Fan Status', 77, '20190819 19:19:25.500'),
     (2444,'Nombre 1', 'Fan Status', 77, '20190819 19:19:30.500'),
     (2444,'Nombre 1', 'Fan Status', 77, '20190819 19:19:35.500'),
     (2444,'Nombre 1', 'Fan Status', 76, '20190819 19:19:40.500'),
     (2444,'Nombre 1', 'Fan Status', 76, '20190819 19:19:45.500'),
     (2444,'Nombre 1', 'Fan Status', 76, '20190819 19:19:50.500'),
     (2444,'Nombre 1', 'Fan Status', 76, '20190819 19:19:55.500'),
     (2444,'Nombre 1', 'Fan Status', 77, '20190819 19:20:00.300'),
     (2444,'Nombre 1', 'Fan Status', 77, '20190819 19:20:05.500'),
     (2444,'Nombre 1', 'Fan Status', 76, '20190819 19:20:10.300'),
     (2444,'Nombre 1', 'Fan Status', 77, '20190819 19:20:15.400'),
     (2444,'Nombre 1', 'Fan Status', 77, '20190819 19:20:20.500'),
     (2444,'Nombre 1', 'Fan Status', 77, '20190819 19:20:25.500'),
     (2444,'Nombre 2', 'Fan Status', 76, '20190819 19:13:55.500'),
     (2444,'Nombre 2', 'Fan Status', 76, '20190819 19:14:00.500'),
     (2444,'Nombre 2', 'Fan Status', 76, '20190819 19:19:50.500'),
     (2444,'Nombre 2', 'Fan Status', 76, '20190819 19:19:55.500');
    
     go
     insert into fan2
      (id, name, sensor, [value],  [date])
     values
     (2444,'Nombre 1', 'Fan Status', 80, '20190819 19:19:10.500'),
     (2444,'Nombre 1', 'Fan Status', 80, '20190819 19:19:15.500'),
     (2444,'Nombre 1', 'Fan Status', 80, '20190819 19:19:20.500'),
     (2444,'Nombre 1', 'Fan Status', 80, '20190819 19:19:25.500'),
     (2444,'Nombre 1', 'Fan Status', 80, '20190819 19:19:30.500'),
     (2444,'Nombre 1', 'Fan Status', 80, '20190819 19:19:35.500'),
     (2444,'Nombre 1', 'Fan Status', 80, '20190819 19:19:40.500'),
     (2444,'Nombre 1', 'Fan Status', 80, '20190819 19:19:45.500'),
     (2444,'Nombre 1', 'Fan Status', 80, '20190819 19:19:50.500'),
     (2444,'Nombre 1', 'Fan Status', 80, '20190819 19:19:55.500'),
     (2444,'Nombre 1', 'Fan Status', 81, '20190819 19:20:00.300'),
     (2444,'Nombre 1', 'Fan Status', 81, '20190819 19:20:05.100'),
     (2444,'Nombre 1', 'Fan Status', 81, '20190819 19:20:10.300'),
     (2444,'Nombre 1', 'Fan Status', 81, '20190819 19:20:15.100'),
     (2444,'Nombre 1', 'Fan Status', 80, '20190819 19:20:20.300'),
     (2444,'Nombre 1', 'Fan Status', 81, '20190819 19:20:25.100'),
     (2444,'Nombre 2', 'Fan Status', 81, '20190819 19:20:30.200'),
     (2444,'Nombre 2', 'Fan Status', 81, '20190819 19:20:35.300'),
     (2444,'Nombre 2', 'Fan Status', 81, '20190819 19:20:40.100'),
     (2444,'Nombre 2', 'Fan Status', 82, '20190819 19:20:45.300');
     go
    

    En tu escenario, aunque no he plasmado todas las filas, son suficientes para ver las posibles salidas.

    Yo utilizaría la sentenciaMerge

    https://docs.microsoft.com/es-es/sql/t-sql/statements/merge-transact-sql?view=sql-server-2017

    MERGE INTO fan2 AS destino
    USING
    (
        SELECT id, 
               name, 
               sensor, 
               [value], 
               [date]
        FROM fan1
    ) AS source
    ON destino.id = source.id
       AND destino.name = source.name
       AND destino.sensor = source.sensor
       AND destino.[date] = source.[date]
        WHEN NOT MATCHED
        THEN
          INSERT(id, 
                 name, 
                 sensor, 
                 [value], 
                 [date])
          VALUES
    (id, 
     name, 
     sensor, 
     [value], 
     [date]
    );

    Si observas la misma, se cruzan las dos tablas, como origen y destino y cuando un registro no exista en destino, se inserta en ella. La coincidencia de registro viene determinada por el on destino.id = source.id and destino.name......

    Te lo comento, porque los registros correspondientes a las horas, por ejemplo, 19:20:15:400 tienen una diferencia de milésimas que a lo mejor no quieres insertar, pero tal cuál esta expuesta la consulta, son diferentes.

    Salida

    id          name      sensor     value       date
    ----------- --------- ---------- ----------- -----------------------
    2444        Nombre 1  Fan Status 80          2019-08-19 19:19:10.500
    2444        Nombre 1  Fan Status 80          2019-08-19 19:19:15.500
    2444        Nombre 1  Fan Status 80          2019-08-19 19:19:20.500
    2444        Nombre 1  Fan Status 80          2019-08-19 19:19:25.500
    2444        Nombre 1  Fan Status 80          2019-08-19 19:19:30.500
    2444        Nombre 1  Fan Status 80          2019-08-19 19:19:35.500
    2444        Nombre 1  Fan Status 80          2019-08-19 19:19:40.500
    2444        Nombre 1  Fan Status 80          2019-08-19 19:19:45.500
    2444        Nombre 1  Fan Status 80          2019-08-19 19:19:50.500
    2444        Nombre 1  Fan Status 80          2019-08-19 19:19:55.500
    2444        Nombre 1  Fan Status 81          2019-08-19 19:20:00.300
    2444        Nombre 1  Fan Status 81          2019-08-19 19:20:05.100
    2444        Nombre 1  Fan Status 81          2019-08-19 19:20:10.300
    2444        Nombre 1  Fan Status 81          2019-08-19 19:20:15.100
    2444        Nombre 1  Fan Status 80          2019-08-19 19:20:20.300
    2444        Nombre 1  Fan Status 81          2019-08-19 19:20:25.100
    2444        Nombre 2  Fan Status 81          2019-08-19 19:20:30.200
    2444        Nombre 2  Fan Status 81          2019-08-19 19:20:35.300
    2444        Nombre 2  Fan Status 81          2019-08-19 19:20:40.100
    2444        Nombre 2  Fan Status 82          2019-08-19 19:20:45.300
    2444        Nombre 1  Fan Status 77          2019-08-19 19:20:05.500
    2444        Nombre 1  Fan Status 77          2019-08-19 19:20:15.400
    2444        Nombre 1  Fan Status 77          2019-08-19 19:20:20.500
    2444        Nombre 1  Fan Status 77          2019-08-19 19:20:25.500
    2444        Nombre 2  Fan Status 76          2019-08-19 19:13:55.500
    2444        Nombre 2  Fan Status 76          2019-08-19 19:14:00.500
    2444        Nombre 2  Fan Status 76          2019-08-19 19:19:50.500
    2444        Nombre 2  Fan Status 76          2019-08-19 19:19:55.500

    (28 filas afectadas)

    Espero te ayude

    miércoles, 21 de agosto de 2019 4:09
  • Una pregunta que agarraste como FAN 1 la tabla azul o naranja

    Pregunta

    miércoles, 21 de agosto de 2019 18:04
  • Hola Dave2203:

    El origen es la tabla naranja, y el destino la azul.

    Estos registros estaban en naranja y no en azul. Después del merge, están en azul, además te los devuelve la select insertados a posteriori.

    2444        Nombre 1  Fan Status 77          2019-08-19 19:20:05.500
    2444        Nombre 1  Fan Status 77          2019-08-19 19:20:15.400
    2444        Nombre 1  Fan Status 77          2019-08-19 19:20:20.500
    2444        Nombre 1  Fan Status 77          2019-08-19 19:20:25.500
    2444        Nombre 2  Fan Status 76          2019-08-19 19:13:55.500
    2444        Nombre 2  Fan Status 76          2019-08-19 19:14:00.500
    2444        Nombre 2  Fan Status 76          2019-08-19 19:19:50.500
    2444        Nombre 2  Fan Status 76          2019-08-19 19:19:55.500

    Los cuatro primeros cambian las milésimas, y por eso los inserta. Los 4 siguientes cambia el nombre, por tanto tampoco existen y también los inserta.

    miércoles, 21 de agosto de 2019 19:02