Table Pivot SQL Server

0

I have a query, which gives me the following results.

   **cedis                 validacion_clientes               Totales**
    Celaya                  No visito a todos los clientes       17.33
    Celaya                  Visito todos los clientes        82.67
    Coecillo            No visito a todos los clientes       7.84
    Coecillo            Visito todos los clientes        92.16
    Irapuato-Irapuato   No visito a todos los clientes       28.48
    Irapuato-Irapuato   Visito todos los clientes        71.52
    León-León Sur           No visito a todos los clientes        3.11
    León-León Sur            Visito todos los clientes       96.89
    León-Oriente León   No visito a todos los clientes       12.00
    León-Oriente León   Visito todos los clientes        88.00

The query generated by this result is the following one (it is important to mention that this is the one that generates all the calculations.) At the end of the last consultation, it gives me the aforementioned result.

-----------TELEMETRIA
    declare @TemporalTelemetria table
    (
        zona varchar(35),
        cedis varchar(35),
        udidlog varchar(15),

        efectividad_reparto float,
        cajas_entregadas int,
        piezas_entregadas int,
        cajas_rechazadas int,
        piezas_rechazadas int,

        clientes_con_rechazo int,
        clientes_con_reentregas int,
        por_reentregas int,

        cajas_revendidas int,
        por_cajas_revendidas float,
        eficiencia_geocodificada float,
        por_clientes_no_visitados float,


        calidad_del_servicio int,
        clientes_sin_firma_entrega int,
        por_clientes_sin_firma_entrega float,
        boton_panico int,
        calificacion_de_servicio bigint,

        tclientes int,
        tvisitados int,
        tnovisitados int,

        tcajas int,
        tpiezas int,
        efectividad_geocodificadas int,     
        tclientes_calificacion int,
        cajas_sin_firma int     
    )

    insert @TemporalTelemetria

    select zona,
           cedis,
           udid,

           efectividad_reparto,
           cajas_entregadas,
           piezas_entregadas,
           coalesce(cajas_rechazadas,0)cajas_rechazadas,
           --(cajas_entregadas + coalesce(cajas_rechazadas,0)) total_cajas_validacion,
           piezas_rechazadas,

           clientes_con_rechazo,
           clientes_con_reentregas,
           por_reentregas,

           cajas_revendidas,
           por_cajas_revendidas,
           eficiencia_geocodificada,
           por_clientes_no_visitados,

           calidad_del_servicio,
           clientes_sin_firma_entrega,
           por_clientes_sin_firma_entrega,
           boton_panico,
           calificacion_de_servicio,

           tclientes,
           tvisitados,
           tnovisitados,

           tcajas,
           tpiezas,
           efectividad_geocodificadas,      
           tclientes_calificacion,
           coalesce(cajas_sin_firma,0) cajas_sin_firma                          

    from Telemetria 
           inner join @temporalzonas on 
            unitsysid = udid



            ;with tmpclientes as(
                select 
                    zona,
                    cedis,
                    tclientes,
                    tvisitados,
                    tnovisitados,                   
                    (
                        case when tclientes = tvisitados then 'Visito todos los clientes' 
                            else 'No visito a todos los clientes'   
                        end
                    )validacion_clientes,

                    (tclientes - tvisitados)clientes_sin_finalizar_tarea,

                    (
                        case when tnovisitados > 0 then 'Uso dispositivo' 
                        else 'No uso dispositivo'
                        end
                    ) validacion_dispositivo                

                 from @TemporalTelemetria
            ), 

            finalizar_cajas as (
                    select cedis,
                           validacion_clientes,
                           count(validacion_clientes) total         total_conteo_clientes as(
                select cedis,
                       count(validacion_clientes)total
                       from tmpclientes
                    group by cedis

            )

            --convert(decimal(10,4), (cast(total_clientes_reentregas as float)  / cast (total_clientes as float))) Totales
            --select * from total_conteo_clientes
            select a.cedis,
                   a.validacion_clientes,
                  convert(decimal(10,2), (cast((a.total * 100 ) as float)/ (cast(b.total as float))))  Totales
                from finalizar_cajas a 
                            inner join total_conteo_clientes b on 
                                            a.cedis = b.cedis                           

                        from tmpclientes
                        group by cedis, validacion_clientes


            ),

What I would like is for the columns to be pivoted in the following way:

    **cedis      No visito a todos los clientes        Visito a todos los clientes**
    Celaya                 17.33                            82.67
    Coecillo                7.84                            92.16

I hope and you can help me, greetings.

    
asked by Ric_hc 12.05.2017 в 17:02
source

2 answers

0

This is quite simple, you should simply replace your last select with the following:

SELECT  a.cedis,
        MIN(CASE 
                WHEN a.validacion_clientes = 'No visito a todos los clientes'
                THEN convert(decimal(10,2), (cast((a.total * 100 ) as float)/ (cast(b.total as float))))
            END) [No visito a todos los clientes],
        MIN(CASE 
                WHEN a.validacion_clientes = 'Visito todos los clientes'
                THEN convert(decimal(10,2), (cast((a.total * 100 ) as float)/ (cast(b.total as float))))
            END) [visito a todos los clientes],
FROM finalizar_cajas a 
INNER JOIN total_conteo_clientes b 
    ON a.cedis = b.cedis                           
GROUP BY a.cedis
    
answered by 12.05.2017 / 17:21
source
0
;with tmpclientes as(
                select 
                    zona,
                    cedis,
                    tclientes,
                    tvisitados,
                    tnovisitados,                   
                    (
                        case when tclientes = tvisitados then 'Visito todos los clientes' 
                            else 'No visito a todos los clientes'   
                        end
                    )validacion_clientes,

                    (tclientes - tvisitados)clientes_sin_finalizar_tarea,

                    (
                        case when tnovisitados > 0 then 'Uso dispositivo' 
                        else 'No uso dispositivo'
                        end
                    ) validacion_dispositivo                

                 from @TemporalTelemetria
            ), 

            finalizar_cajas as (
                    select cedis,
                           validacion_clientes,
                           count(validacion_clientes) total
                        from tmpclientes
                        group by cedis, validacion_clientes


            ),


            total_conteo_clientes as(
                select cedis,
                       count(validacion_clientes)total
                       from tmpclientes
                    group by cedis

            ) , preData as (

            --convert(decimal(10,4), (cast(total_clientes_reentregas as float)  / cast (total_clientes as float))) Totales
            --select * from total_conteo_clientes
            select a.cedis,
                   a.validacion_clientes
                   , case WHEN a.validacion_clientes = 'No visito a todos los clientes' then 
                        convert(decimal(10,2), (cast((a.total * 100 ) as float)/ (cast(b.total as float))))  
                        else 0  end as'No visito a todos los clientes'
                    , case WHEN a.validacion_clientes = 'Visito todos los clientes' then 
                        convert(decimal(10,2), (cast((a.total * 100 ) as float)/ (cast(b.total as float))))  
                        else 0  end as'Visito todos los clientes'

                from finalizar_cajas a 
                            inner join total_conteo_clientes b on 
                                            a.cedis = b.cedis                       
            ) select a.cedis , sum([No visito a todos los clientes]) as 'No visito a todos los clientes'            
            , sum([Visito todos los clientes] ) as 'Visito a todos los clientes'
            from preData a group by a.cedis
    
answered by 12.05.2017 в 17:58