none
Ayuda con procedimiento almacenado RRS feed

  • Pregunta

  • Hola amigos como esta, queria ver si me pueden ayudar con un problema que tengo

    Tengo las siguientes TABLAS y campos

    SERVICIO,servicioid,Tecnicoid,Fecha....

    SERVICIO_DET,id,ServicioId,TipoServicioId,Cantidad....

    TECNICO,TecnicoId,Nombre.....

    TIPO_SERVICIO,TipoServicioId,Descripcion...,

    De estas tablas tengo que hacer un reporte como el siguiente

    Rótulos de fila Tecnico1  Tecnico2 Tecnico3 Tecnico4 Tecnico5 Total general          %
    Total Enero 10 66 42 20 58 196   %
    % 5.10% 33.67% 21.43% 10.20% 29.59%  
    call center 0 4 9 3 3 19   9.69%
    instalaciones 1 11 1 2 3 18 9.18%
    mantenimiento 2 21 7 2 23 55  28.06%
    soporte 3 2 7 7 12 31 15.82%
    limpieza 0 6 2 4 2 14 7.14%
    revision 4 22 16 2 15 59   30.10%

    He llegado a sacar con una consulta lo siguiente

    mes tecnicoid Nombre TipoServicioId Descripcion asistencias
    1 1 Tecnico1 1 1-800 43
    1 1 Tecnico1 2 MANTENIMIENTO 21
    1 1 Tecnico1 3 INSTALACION 21
    1 1 Tecnico1 4 RENTAS 0
    1 1 Tecnico1 5 REPETIDAS 0
    1 1 Tecnico1 6 REVISION 0
    1 1 Tecnico1 7 FSMA 0
    1 1 Tecnico1 8 GARANTIA OFFICE 0
    1 1 Tecnico1 9 REPARACIÓN 0
    7 1 Tecnico1 1 1-800 0
    7 1 Tecnico1 2 MANTENIMIENTO 0
    7 1 Tecnico1 3 INSTALACION 0
    7 1 Tecnico1 4 RENTAS 0
    7 1 Tecnico1 5 REPETIDAS 0
    7 1 Tecnico1 6 REVISION 4
    7 3 Tecnico2 1 1-800 0
    7 3 Tecnico2 2 MANTENIMIENTO 9
    7 3 Tecnico2 3 INSTALACION 1
    7 3 Tecnico2 4 RENTAS 0
    7 3 Tecnico2 5 REPETIDAS 0
    7 3 Tecnico2 6 REVISION 9
    8 1 Tecnico1 1 1-800 0
    8 1 Tecnico1 2 MANTENIMIENTO 0
    8 1 Tecnico1 3 INSTALACION 1
    8 1 Tecnico1 4 RENTAS 0
    8 1 Tecnico1 5 REPETIDAS 0
    8 1 Tecnico1 6 REVISION 2

    La consulta que uso es

    select month(fecha) as mes,a.tecnicoid,d.Nombre,d.tecnico_login,b.TipoServicioId,c.Descripcion,sum(b.Cantidad)
    from off_servicio a
    inner join off_servicio_det b on a.ServicioId=b.ServicioId
    inner join off_tipo_servicio c on b.TipoServicioId=c.TipoServicioId
    inner join off_tecnico d on a.TecnicoId=d.TecnicoId
    where Fecha>=@FechaInicio and Fecha<=@FechaFin and a.Eliminado=0
    group by MONTH(fecha),a.tecnicoid,d.Nombre,d.tecnico_login,b.TipoServicioId,c.Descripcion
    
    order by 1

    Entonces con la consulta que realizaba lo exportaban a excel, y con tabla dinamica hacian los reportes en el formato que les indique un poco mas arriba.

    Y ahora quieren el reporte que salga directo, y aqui estoy con algunas dudas de como podria hacer este reporte,

    Mi consulta es como podria hacer este reporte con una sola consulta?, de pronto usan pivot que he visto algo por ahi y parece que me puede ayudar, 

    O me toca ir de uno en uno barriendo la conusulta y creando tablas temporales de forma dinamica para poder hacer lo que necesito, 

    ustedes con su experiencia espero me puedan orientar de como obtener este reporte.


    Saludos

    jueves, 23 de enero de 2014 21:23

Respuestas

Todas las respuestas

  • Hola.

    ¿Qué se entiendo por "quieren que el reporte salga directo"? ¿Has de preparar un informe de Reporting Services que lo haga o cómo es la capa de presentación en este caso?

    Si lo debes obtener de una sentencia T-SQL, pivotar sería la opción que más puede aproximarse, según lo expones. Si no lo logras por ti mismo, facilita scritps de creación de tablas y scripts de inserción de datos de ejemplo.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    domingo, 26 de enero de 2014 15:59
    Moderador
  • Que tal Alberto gracias por responder, con lo que reporte directo decia que no quieren ellos realizar ninguna operacion en excel para obtener el reporte final sino de una que muestre el sistema.

    No tengo instalado reporting services y no creo que podamos usarlo, 

    La capa de presentacion tengo un form el cual llama a mi capa de datos y esta ejecuta un procedimiento almacenado o una consulta directa dependiendo del caso.

    Los scripts de tablas y datos son los siguientes

    Espero puedas ayudarme

    https://dl.dropboxusercontent.com/u/39103241/SQLQuery4.sql

    Saludos

    martes, 28 de enero de 2014 15:18
  • Hola, te sugiero utilizar "PowerPivot" en excel, bajate el instalador, fijate si tu excel es de 32 o 64 bits. Crea una conexión a tu basa, y jala los datos con la consulta SQL que comentas. Luego con las tablas dinamicas haz el reporte, si mantienes la conexión el ususario podrá ponerle actualizar y listo, no hará nada mas que ver siempre su reporte, suerte.

    Espero te sirva.


    Carlos Severino Chuquillanqui Gamarra

    martes, 28 de enero de 2014 15:44
  • Hola.

    En ese caso, haz tú las modificaciones en el Excel antes de mandarlas, creas una plantilla que tenga la tabla dinámica ya creada y sólo cambias los datos de los que esta se nutre de una vez para otra.

    ¿Valdría esa opción?


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    viernes, 31 de enero de 2014 22:12
    Moderador
  • Gracias igual hasta ver si consigo como sacar directo lo voy a hacer asi, el problema de esto es que ellos siguen dependiendo de una persona para obtener el reporte, a veces los usuarios son muy comodos.


    Saludos

    viernes, 31 de enero de 2014 22:47
  • Hola.

    Lo que yo estaba proponiendo no requiere del usuario nada más que recibir el Excel. De todos modos, hay muchas otras alternativas, no es únicamente esta la opción.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    sábado, 1 de febrero de 2014 15:06
    Moderador