none
Concatenar Valore de otras tablas en solo una. RRS feed

  • Pregunta

  • Hola Comunidad!, necesito concatenar valores distintos de diferentes tablas y no se como lograrlo, quizas con inner join pero no me ha salido.

    CÓDIGO:

     select IdTurno from H_Turnos where IdTurno = 1 
     select IdServicio from H_Servicios where IdServicio = 1
     select Inicio from H_InfoEstadosServicio  where Inicio = ('2019-07-12 09:44:39.683')
     select Fin from H_InfoEstadosServicio where Fin = ('2019-07-12 09:47:27.737')
     select Nombre from EstadosServicio where Nombre = ('EnEspera') 
     select Nombre from EstadosServicio where Nombre = ('Llamando') 
     select Nombre from EstadosServicio where Nombre = ('EnAtencion') 
     select Nombre from EstadosServicio where Nombre = ('Finalizado') 

    viernes, 30 de agosto de 2019 20:54

Respuestas

  • Hola Jupablacha18:

    por esa misma razón lo que tu vez básico yo lo veo complejo

    Lo que comentas es lo mismo que nos ocurre a todos, todos los días. A lo mejor no en este contexto, pero si en otros. Al menos que yo sepa nadie nace aprendido. No dudes en preguntar todo lo que se te ocurra, que yo al menos si puedo intentaré ayudarte, aunque no siempre sea todo lo correcto y apropiado que debiera.

    lunes, 2 de septiembre de 2019 21:08
  • Hola Jupablacha18:

    El detalle de sus tablas es muy poco detallado, para poder darle una solución clara.

    Creo que su escenario es parecido a este.

    CREATE TABLE H_turnos
    (idTurno     INT, 
     descripcion VARCHAR(10)
    );
    CREATE TABLE H_Servicios
    (idTurno              INT, 
     idServicio           INT, 
     idInfoEstadoServicio INT, 
     Inicio               DATETIME, 
     fin                  DATETIME
    );
    CREATE TABLE H_InfoEstadosServicio
    (idInfoEstadoServicio INT, 
     idEstadoServicio     INT
    );
    CREATE TABLE EstadosServicio
    (idEstadoServicio INT, 
     nombre           VARCHAR(100)
    );
    GO
    Insert into H_turnos 
    ( idTurno
    , descripcion) 
    values
    (1,'turno');
    Insert into H_Servicios 
    ( idTurno
    , idServicio
    , idInfoEstadoServicio
    , Inicio
    , fin)
     values 
     (1,1,1,'20190712 09:44','20190712 09:47'),
     (1,1,2,'20190712 09:44','20190712 09:47'),
     (1,1,3,'20190712 09:44','20190712 09:47'),
     (1,1,4,'20190712 09:44','20190712 09:47');
    GO
    Insert into H_InfoEstadosServicio 
    ( idInfoEstadoServicio
    , idEstadoServicio)
    values
    (1, 1),
    (2 ,2),
    (3 ,3),
    (4 ,4);
    GO
    Insert into EstadosServicio 
    ( idEstadoServicio
    , nombre)
    values
    (1,'EnEspera') ,
    (2,'Llamando') ,
    (3,'EnAtencion'),
    (4,'Finalizado');
    GO

    Una solución, como ya le ha recomendado José Diz sería.

    SELECT t.idTurno, 
           s.idServicio, 
           s.Inicio, 
           s.fin, 
           e.nombre
    FROM H_turnos t
         LEFT JOIN H_Servicios s ON t.idTurno = s.idTurno
         LEFT JOIN H_InfoEstadosServicio i ON s.idInfoEstadoServicio = i.idInfoEstadoServicio
         LEFT JOIN EstadosServicio e ON e.idEstadoServicio = i.idEstadoServicio;

    Además le he creado un pequeño artículo, que quizá le ayude a entender un poco mejor, cuales son las columnas para relacionar tablas, y así poder enfrentarse a una select con más garantías.

    https://javifer2.wordpress.com/2019/08/31/inner-join-multiples-tablas/

    sábado, 31 de agosto de 2019 10:46
  • Deleted
    sábado, 31 de agosto de 2019 0:50
  • Deleted
    sábado, 31 de agosto de 2019 0:56

Todas las respuestas

  • Hola:

    Puedes utilizar union all, pero es necesario que todos los datos se resuelvan al mismo tipo. Por ejemplo:

    Select cast ( idturno as nvarchar(200)) as ej from ....

    Union all

    Select ....

    viernes, 30 de agosto de 2019 20:59
  • No me sirve, la idea es que traiga esos Where que le puse osea lo que yo quiero es que aparezca esto

    Id Turno   Id Servicio                 Inicio                                 Fin                     Nombre

         1               1          2019-07-12 09:44:39.683    2019-07-12 09:47:27.737    En Espera

                                                                                                                                 Llamando

                                                                                                                                 En Atención

                                                                                                                                 Finalizado

    viernes, 30 de agosto de 2019 21:28
  • Primero, SQL no FORMATEA las salidas de sus consultas

    ¿Que relacion existe entre las tablas que muestra?


    IIslas Master Consultant SQL Server

    viernes, 30 de agosto de 2019 21:34
  • De H_Turnos Y DE H_Servicios la relacion es IdTurno

    De H_InfoEstadosServicio y DE EstadosServicio es IdEstadoServicio

    viernes, 30 de agosto de 2019 21:37
  • Deleted
    sábado, 31 de agosto de 2019 0:50
  • Deleted
    sábado, 31 de agosto de 2019 0:56
  • Hola Jupablacha18:

    El detalle de sus tablas es muy poco detallado, para poder darle una solución clara.

    Creo que su escenario es parecido a este.

    CREATE TABLE H_turnos
    (idTurno     INT, 
     descripcion VARCHAR(10)
    );
    CREATE TABLE H_Servicios
    (idTurno              INT, 
     idServicio           INT, 
     idInfoEstadoServicio INT, 
     Inicio               DATETIME, 
     fin                  DATETIME
    );
    CREATE TABLE H_InfoEstadosServicio
    (idInfoEstadoServicio INT, 
     idEstadoServicio     INT
    );
    CREATE TABLE EstadosServicio
    (idEstadoServicio INT, 
     nombre           VARCHAR(100)
    );
    GO
    Insert into H_turnos 
    ( idTurno
    , descripcion) 
    values
    (1,'turno');
    Insert into H_Servicios 
    ( idTurno
    , idServicio
    , idInfoEstadoServicio
    , Inicio
    , fin)
     values 
     (1,1,1,'20190712 09:44','20190712 09:47'),
     (1,1,2,'20190712 09:44','20190712 09:47'),
     (1,1,3,'20190712 09:44','20190712 09:47'),
     (1,1,4,'20190712 09:44','20190712 09:47');
    GO
    Insert into H_InfoEstadosServicio 
    ( idInfoEstadoServicio
    , idEstadoServicio)
    values
    (1, 1),
    (2 ,2),
    (3 ,3),
    (4 ,4);
    GO
    Insert into EstadosServicio 
    ( idEstadoServicio
    , nombre)
    values
    (1,'EnEspera') ,
    (2,'Llamando') ,
    (3,'EnAtencion'),
    (4,'Finalizado');
    GO

    Una solución, como ya le ha recomendado José Diz sería.

    SELECT t.idTurno, 
           s.idServicio, 
           s.Inicio, 
           s.fin, 
           e.nombre
    FROM H_turnos t
         LEFT JOIN H_Servicios s ON t.idTurno = s.idTurno
         LEFT JOIN H_InfoEstadosServicio i ON s.idInfoEstadoServicio = i.idInfoEstadoServicio
         LEFT JOIN EstadosServicio e ON e.idEstadoServicio = i.idEstadoServicio;

    Además le he creado un pequeño artículo, que quizá le ayude a entender un poco mejor, cuales son las columnas para relacionar tablas, y así poder enfrentarse a una select con más garantías.

    https://javifer2.wordpress.com/2019/08/31/inner-join-multiples-tablas/

    sábado, 31 de agosto de 2019 10:46
  • Gracias por tomarte el tiempo de crear ese instructivo que fue de gran ayuda, no soy bueno en esto, Apenas estoy haciendo mi Técnico en Software(Donde voy hasta ahora 2 meses de estudio), por esa misma razón lo que tu vez básico yo lo veo complejo, gracias por la respuesta.
    lunes, 2 de septiembre de 2019 14:22
  • Hola Jupablacha18:

    por esa misma razón lo que tu vez básico yo lo veo complejo

    Lo que comentas es lo mismo que nos ocurre a todos, todos los días. A lo mejor no en este contexto, pero si en otros. Al menos que yo sepa nadie nace aprendido. No dudes en preguntar todo lo que se te ocurra, que yo al menos si puedo intentaré ayudarte, aunque no siempre sea todo lo correcto y apropiado que debiera.

    lunes, 2 de septiembre de 2019 21:08