none
Añadir campos a Tablas Temporales RRS feed

  • Pregunta

  • Tengo 2 consultas a tablas temporales. Los datos vienen de  diferentes bases de datos y se generan en tablas temporales.

     SELECT usuario, Fecha --fechaIni  Fecha
      
         , MIN(CASE WHEN EVENTO = 'LOGIN' THEN FechaHora END) AS FechaLogin       
        , MAX(CASE WHEN EVENTO = 'LOGOUT' THEN FechaHora  END) AS FechaLogout
    
    	, DATENAME(dw,Fecha) DiaSemana
    	-- , DATEPART(dw,Fecha) DiaSemanaCodigo
    	-- , DATEPART(year, Fecha)  Anyo
        -- ,DATEPART(month, Fecha)  Mes
        -- ,DATEPART(day, Fecha)   Dia
        -- ,DATEPART(dayofyear, Fecha)  DiaAnyo
    	--, CASE WHEN DATEPART(dw,Fecha) = 7   THEN 1 ELSE 0 END EsDomingo
    	--, 0 EsFestivo
    
    from #HistoricoUserTable
    
    GROUP BY  usuario, Fecha -- fechaIni 
      order by usuario, Fecha -- fechaIni

    tabla

    +-------------------+------------+-------------------------+-------------------------+-----------+
    |      usuario      |   Fecha    |       FechaLogin        |       FechaLogout       | DiaSemana |
    +-------------------+------------+-------------------------+-------------------------+-----------+
    | aida.xxx          | 2019-06-13 | 2019-06-13 08:52:04.000 | 2019-06-13 14:00:22.000 | Jueves    |
    | aida.xxx          | 2019-06-17 | 2019-06-17 08:49:35.000 | 2019-06-17 14:00:15.000 | Lunes     |
    | aida.xxx          | 2019-06-18 | 2019-06-18 08:48:39.000 | 2019-06-18 14:00:40.000 | Martes    |
    | alejandra.z       | 2019-06-13 | 2019-06-13 08:40:58.000 | 2019-06-13 14:01:56.000 | Jueves    |
    | alejandra.z       | 2019-06-17 | 2019-06-17 08:36:28.000 | 2019-06-17 14:00:33.000 | Lunes     |
    | alejandra.z       | 2019-06-18 | 2019-06-18 08:50:16.000 | 2019-06-18 14:01:35.000 | Martes    |
    +-------------------+------------+-------------------------+-------------------------+-----------+

    Y


     SELECT usuario, Fecha --fechaIni  Fecha
      
         , MIN(CASE WHEN StateDescription = 'LOGIN' THEN FechaHora END) AS FechaLogin2       
        , MAX(CASE WHEN StateDescription = 'LOGOUT' THEN FechaHora  END) AS FechaLogout2
    
    	, DATENAME(dw,Fecha) DiaSemana
    	--, DATEPART(dw,Fecha) DiaSemanaCodigo
    	--, DATEPART(year, Fecha)  Anyo
        --,DATEPART(month, Fecha)  Mes
        --,DATEPART(day, Fecha)   Dia
        --,DATEPART(dayofyear, Fecha)  DiaAnyo
    	--, CASE WHEN DATEPART(dw,Fecha) = 7   THEN 1 ELSE 0 END EsDomingo
    	--, 0 EsFestivo
    
    from #ODActionsTable 
    GROUP BY  usuario, Fecha -- fechaIni 
      order by usuario, Fecha -- fechaIni

    tabla

    +---------+------------+-------------------------+-------------------------+-----------+
    | usuario |   Fecha    |       FechaLogin2       |      FechaLogout2       | DiaSemana |
    +---------+------------+-------------------------+-------------------------+-----------+
    |    1613 | 2019-06-13 | 2019-06-13 08:53:06.607 | 2019-06-13 14:00:16.300 | Jueves    |
    |    1613 | 2019-06-17 | 2019-06-17 08:50:31.013 | 2019-06-17 14:00:12.190 | Lunes     |
    |    1614 | 2019-06-13 | 2019-06-13 08:53:43.950 | 2019-06-13 14:01:51.017 | Jueves    |
    |    1614 | 2019-06-17 | 2019-06-17 08:49:58.810 | 2019-06-17 14:00:31.250 | Lunes     |
    +---------+------------+-------------------------+-------------------------+-----------+

    Finalmente se quiere una tabla con los siguientes campos de las 2 tablas temporales:

    Usuario, UsuarioCode, Fecha, FechaLogin, FechaLogout, FechaLogin2, FechaLogout2, DiaSemana, ...

    Relacionamos código de usuario y usuario, y el valor de Fecha.

    Sugerencias? Es posible hacerlo con tablas temporales?

    martes, 25 de junio de 2019 16:03

Respuestas

  • No hay pega, se puede hacer con toda normalidad un JOIN de las dos tablas temporales y el resultado meterlo en otra tabla temporal... a condicion de que todas las operaciones se hagan desde la misma conexion sin cerrarla en ningun momento, ya que al cerrarla las tablas temporales se borran, y si abres una conexion distinta no "ve" las tablas temporales creadas por las otras conexiones.
    • Marcado como respuesta Miriam Pasion martes, 25 de junio de 2019 20:05
    martes, 25 de junio de 2019 16:14

Todas las respuestas

  • No hay pega, se puede hacer con toda normalidad un JOIN de las dos tablas temporales y el resultado meterlo en otra tabla temporal... a condicion de que todas las operaciones se hagan desde la misma conexion sin cerrarla en ningun momento, ya que al cerrarla las tablas temporales se borran, y si abres una conexion distinta no "ve" las tablas temporales creadas por las otras conexiones.
    • Marcado como respuesta Miriam Pasion martes, 25 de junio de 2019 20:05
    martes, 25 de junio de 2019 16:14
  • Podría hacerlo en un Procedimiento Almacenado, o utilizar DAPPER (C# NET) con la misma conexión par todas las consultas.

    select * from #HistoricoUserTable2  H2 FULL OUTER JOIN #ODActionsTable2 A2 ON H2.UsuarioHermes = A2.UsuarioHermes AND H2.Fecha = A2.Fecha ORDER BY H2.UsuarioHermes, H2.FECHA


    +-------------------+---------------+------------+-------------------------+-------------------------+-----------+---------------+------------+-------------------------+-------------------------+-----------+
    |      usuario      | UsuarioHermes |   Fecha    |       FechaLogin        |       FechaLogout       | DiaSemana | usuarioHermes |   Fecha    |       FechaLogin2       |      FechaLogout2       | DiaSemana |
    +-------------------+---------------+------------+-------------------------+-------------------------+-----------+---------------+------------+-------------------------+-------------------------+-----------+
    | aida.X            |          1613 | 2019-06-13 | 2019-06-13 08:52:04.000 | 2019-06-13 14:00:22.000 | Jueves    | 1613          | 2019-06-13 | 2019-06-13 08:53:06.607 | 2019-06-13 14:00:16.300 | Jueves    |
    | aida.X            |          1613 | 2019-06-17 | 2019-06-17 08:49:35.000 | 2019-06-17 14:00:15.000 | Lunes     | 1613          | 2019-06-17 | 2019-06-17 08:50:31.013 | 2019-06-17 14:00:12.190 | Lunes     |
    | aida.X            |          1613 | 2019-06-18 | 2019-06-18 08:48:39.000 | 2019-06-18 14:00:40.000 | Martes    | NULL          | NULL       | NULL                    | NULL                    | NULL      |
    | alejandra.Z       |          1614 | 2019-06-13 | 2019-06-13 08:40:58.000 | 2019-06-13 14:01:56.000 | Jueves    | 1614          | 2019-06-13 | 2019-06-13 08:53:43.950 | 2019-06-13 14:01:51.017 | Jueves    |
    | alejandra.Z       |          1614 | 2019-06-17 | 2019-06-17 08:36:28.000 | 2019-06-17 14:00:33.000 | Lunes     | 1614          | 2019-06-17 | 2019-06-17 08:49:58.810 | 2019-06-17 14:00:31.250 | Lunes     |
    | alejandra.Z       |          1614 | 2019-06-18 | 2019-06-18 08:50:16.000 | 2019-06-18 14:01:35.000 | Martes    | NULL          | NULL       | NULL                    | NULL                    | NULL      |
    +-------------------+---------------+------------+-------------------------+-------------------------+-----------+---------------+------------+-------------------------+-------------------------+-----------+



    miércoles, 26 de junio de 2019 10:05