none
Intercambiar columnas por valores RRS feed

  • Pregunta

  • Buenas a todos,

    Tengo una Tabla que se llama "Ficha" en la que aparecen los siguientes campos:

    NOMBRE                Piscina          Polideportivo          Tenis          Campo de futbol       
    Juan Macias        2016-01-10      2016-01-15           NULL                   NULL
    Ramon Salcedo   2015-12-17             NULL          2016-01-20        2016-01-15    
    Damian Ruiz             NULL           2016-01-22           NULL              2016-01-23
    Julieta Gonzalez       NULL           2015-12-20      2016-01-10             NULL
    Marta Rojas        2016-01-16             NULL          2016-01-23             NULL
    Jose Mayor               NULL                  NULL               NULL              2016-01-22
    ...

    Y quiero transformarla en una tabla en la que en vez de las instalaciones y de las personas que accedieron a estas, dependan de las instalaciones y las fechas por semanas de la gente que accedió:

    SEMANA                Piscina          Polideportivo          Tenis          Campo de futbol
    W51            Ramon Salcedo               NULL               NULL                     NULL
    W51                       NULL           Julieta Gonzalez      NULL                     NULL
    W01                Juan Macias                NULL               NULL                      NULL
    W01                       NULL                    NULL        Julieta Gonzalez         NULL
    W02                       NULL             Juan Macias           NULL                      NULL
    W02                       NULL                    NULL               NULL              Ramon Salcedo
    W02              Marta Rojas                  NULL               NULL                      NULL
    W03                       NULL                   NULL        Ramon Salcedo             NULL
    W03                       NULL            Damian Ruiz           NULL                     NULL
    W03                       NULL                   NULL               NULL              Damian Ruiz
    W03                       NULL                   NULL          Marta Rojas                 NULL
    W03                       NULL                   NULL               NULL                Jose Mayor


    Estaba pensando en utilizar UNIONALLs y ejecutar miles de consultas, pero no se ni por donde empezar. ¿Me puede echar alguien una mano? Muchas gracias
    lunes, 25 de enero de 2016 21:30

Todas las respuestas

  • Hola Gekko223.

    Gracias por consultar en los foros. He estado revisando tu pregunta y puedo sugerirte un método, actualmente no sé que datos incluyes en la tabla "ficha", sin embargo creo que primero debes separar tus fechas para que éstas pertenezcan a un grupo de semana. ej
    "Si la fecha es 1 Enero 2016 entonces pertenece a Semana 1, Si la fecha es 26 Enero 2016 pertenece a Semana 5"

    Después lo ideal sería hacer la busqueda de los datos a través de union all, incluyendo los parámetros que necesitas en la consulta.

    SELECT Piscina, Polideportivo, Tenis, Campo de Futbol FROM Ficha WHERE IN ('w05' 'w03')

    Espero sea de utilidad, estoy atenta a tus comentarios.

    Saludos,

    Karen.

    _________________


    Por favor, recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema.

    Es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    martes, 26 de enero de 2016 22:06
    Moderador
  • Hola Gekko 23, de acuerdo con Karen Malagón , te hace falta esa columna, valida si esto te ayuda, 

    tambien este codigo se podría optimizar.

    create table #socios 
    (
    nombre VARCHAR(50),
    piscina DATETIME,
    polideportivo DATETIME,
    tenis DATETIME,
    campofutbol DATETIME
    
    )
    
    INSERT INTO #socios VALUES ('Juan Macias','2016-10-01',' 2016-15-01 ',NULL,NULL)
    INSERT INTO #socios VALUES ('Ramon Salcedo','2015-17-12',NULL,' 2016-20-01',' 2016-15-01')
    INSERT INTO #socios VALUES ('Damian Ruiz ',NULL,' 2016-22-01',NULL,' 2016-23-01')
    INSERT INTO #socios VALUES ('Julieta Gonzalez ',NULL,' 2015-20-12','2016-10-01',NULL)
    INSERT INTO #socios VALUES ('Marta Rojas  ',' 2015-16-01',NULL,'2016-23-01',NULL)
    INSERT INTO #socios VALUES ('Jose Mayor  ',NULL,NULL,NULL,'2016-22-01')
    
    --select DATEPART (week,'2016-01-23')
    
    
    
    select A.SEMANA,
    case when A.SEMANA=DATEPART(week,piscina) then A.nombre END AS 'PISCINA',
    case when A.SEMANA=DATEPART(week,polideportivo) then A.nombre END AS 'POLIDEPORTIVO',
    case when A.SEMANA=DATEPART(week,tenis) then A.nombre END AS 'TENIS',
    case when A.SEMANA=DATEPART(week,campofutbol) then A.nombre END AS 'CAMPO DE FUTBOL' 
    from (
    select d.* from
    (
    select DATEPART(week,piscina) as 'SEMANA',*
     from dbo.#socios 
    union all
    
    select DATEPART(week,polideportivo),*
     from dbo.#socios
    union all
    select DATEPART(week,tenis),*
     from dbo.#socios
    union all
    select DATEPART(week,campofutbol),*
    from 
    #socios
    ) d
    where d.SEMANA is not null
    )A
    GROUP BY A.SEMANA,A.NOMBRE,
    DATEPART(week,piscina),
    DATEPART(week,polideportivo) ,
    DATEPART(week,tenis) ,
    DATEPART(week,campofutbol)
    
    --'PISCINA',
    --'POLIDEPORTIVO',
    --'TENIS',
    -- 'CAMPO DE FUTBOL' 
    
    
    ORDER BY A.SEMANA
    
    drop table  #socios 


    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala.
    Saludos.
    Lima-Perú



    miércoles, 27 de enero de 2016 21:56