none
Sentencia SQL SERVER

    Question

  • Buenas, espero alguien me ayude:

    Se necesita que muestre el personal que consume llamadas durante el día es decir cuánto es el costo total que realiza llamando a FIJO LOCAL, MOVIL, INTERNACIONAL, Y EL TOTAL DE TODO que sea por fecha

    ALGO ASI:

    PERSONAL                      FIJO LOCAL                   MOVIL           INTERNACIONAL         TOTAL EN SOLES
    Maria Vallejo                              2.80                      4.58                      2.58                                 9.96
    Roberto Garcia                       2.58    2.10                       5.20                                  9.88

    Estuve haciendo primero por separado REGION_ID= '1' ES FIJO LOCAL , REGION_ID= 3,5,7,6 ES MOVIL, REGION_ID='8' ES INTERNACIONAL.

    Si me sale por separado pero la cuestion es que me quede todo en una sola.

    Lo que he estado avanzando

    SELECT PERSONAL_STR, SUM (COST) AS 'COSTO TOTAL' FROM CALLS WHERE FECHA_ACTUAL='09-21-2012'
    GROUP BY PERSONAL_STR   
    GO
    SELECT PERSONAL_STR, SUM (COST) AS 'COSTO FIJO LOCAL' FROM CALLS WHERE (FECHA_ACTUAL='09-21-2012') 
    AND REGION_ID='1' GROUP BY PERSONAL_STR
    GO
    SELECT PERSONAL_STR, SUM (COST) AS 'COSTO MOVIL' FROM CALLS WHERE (REGION_ID='3' 
    OR REGION_ID='5' OR REGION_ID='6' OR REGION_ID='7') AND FECHA_ACTUAL='09-21-2012' GROUP BY PERSONAL_STR
    GO
    SELECT PERSONAL_STR, SUM (COST) AS 'COSTO INTERNACIONAL' FROM CALLS WHERE (REGION_ID='8') 
    AND FECHA_ACTUAL='10-24-2012' GROUP BY PERSONAL_STR
    GO

    Si el personal solo hizo llamada LOCAL de todas maneras q salga en la lista, LO QUE NECESITO ES QUE ME DETALLE POR CADA UNO.

    Lo necesito en un procedimiento para jalarlo al reporte (crystal report).

    Necesito ayuda es urgente, ideas para hacerlo, estaba intentando hace con un case para lo de REGION pero como haria con la FECHA ayudenme.


    • Moved by webJose Wednesday, January 09, 2013 3:04 AM (De:ASP.NET)
    • Edited by becsa Wednesday, January 09, 2013 4:23 AM
    Wednesday, January 09, 2013 2:50 AM

Answers

  • Puedes usar una expresion CASE para regar los tipos.

    SELECT PERSONAL_STR,
        SUM(COSTO) as total,
        SUM (case when
     REGION_ID= '1' then COSTO else 0 end) AS [COSTO FIJO LOCAL] ,
       
    SUM (case when  REGION_ID in ('3', '5', '6', '7') then COSTO else 0 end) AS [COSTO MOVIL],
        ...
    FROM CALLS
    WHERE (FECHA_ACTUAL='09-21-2012') 

    GROUP BY PERSONAL_STR;


    AMB

    Some guidelines for posting questions...

    • Marked as answer by becsa Wednesday, January 09, 2013 8:46 PM
    Wednesday, January 09, 2013 8:02 PM

All replies

  • Hola.

    Prepáralo para que muestre la información de detalle y crea las agrupaciones, subtotales y totales desde Crystal Report. De esa manera tendrás el detalle y el resumen.

    Inténtalo, si no lo logras nos dices. Si quieres, movemos el hilo a un foro de Crystal.


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

    Wednesday, January 09, 2013 11:09 AM
    Moderator
  • Gracias por la respuesta, lo que sucede es que me lo han pedido en query, es por eso que estoy realizando la sentencia.

    Por separado ya me sale, con las sentencias que puse arriba, de cada uno LLAMADA LOCAL, LLAMADA INTERNACIONAL, MOVIL, TOTAL y por FECHA.

    La cuestión es qe no se como hacer q cada respuesta que me sale por separado me salga en el formato siguiente. como unidos.

    PERSONAL                      FIJO LOCAL                   MOVIL           INTERNACIONAL         TOTAL EN SOLES
    Maria Vallejo                              2.80                      4.58                      2.58                                 9.96
    Roberto Garcia                       2.58    2.10                       5.20                                  9.88

    Gracias.

    Wednesday, January 09, 2013 7:53 PM
  • Puedes usar una expresion CASE para regar los tipos.

    SELECT PERSONAL_STR,
        SUM(COSTO) as total,
        SUM (case when
     REGION_ID= '1' then COSTO else 0 end) AS [COSTO FIJO LOCAL] ,
       
    SUM (case when  REGION_ID in ('3', '5', '6', '7') then COSTO else 0 end) AS [COSTO MOVIL],
        ...
    FROM CALLS
    WHERE (FECHA_ACTUAL='09-21-2012') 

    GROUP BY PERSONAL_STR;


    AMB

    Some guidelines for posting questions...

    • Marked as answer by becsa Wednesday, January 09, 2013 8:46 PM
    Wednesday, January 09, 2013 8:02 PM
  • haber lo podrias hacer es si tienes solo estos datos y pon tu variable de tipo fecha y personal o a menos que quieres que salguen todo el presonal solo pondrias la variable de tipo fecha y quitas PERSONAL_STR

    FIJO LOCAL                   MOVIL           INTERNACIONAL

    Declare  @FIJO Numeric (18,4)

    Declare  @MOVIL Numeric (18,4)

    Declare  @INTERNACIONAL Numeric (18,4)

    Declare  @TOTAL Numeric (18,4)

    SET @FIJO =(SELECT PERSONAL_STR, SUM (COST) AS 'COSTO FIJO LOCAL' FROM CALLS WHERE (FECHA_ACTUAL='09-21-2012') 
    AND REGION_ID='1' GROUP BY PERSONAL_STR)

    SET @MOVIL =(SELECT PERSONAL_STR, SUM (COST) AS 'COSTO MOVIL' FROM CALLS WHERE (REGION_ID='3' 
    OR REGION_ID='5' OR REGION_ID='6' OR REGION_ID='7') AND FECHA_ACTUAL='09-21-2012' GROUP BY PERSONAL_STR)

    SET @INTERNACIONAL=(SELECT PERSONAL_STR, SUM (COST) AS 'COSTO INTERNACIONAL' FROM CALLS WHERE (REGION_ID='8') 
    AND FECHA_ACTUAL='10-24-2012' GROUP BY PERSONAL_STR)

    SET @TOTAL =@FIJO +@MOVIL +@INTERNACIONAL

    select @FIJO ,@MOVIL ,@INTERNACIONAL,@TOTAL

    ahi esta al menos la idea prueba quitando el PERSONAL_STR de los select

     

    Wednesday, January 09, 2013 8:11 PM
  • Yo estaba intentanto hacer con el CASE, pero como nunca lo había utilizado, estaba buscando como utilizar pero no habia casos como el que yo necesitaba, muchas gracias por su ayuda por que es así como me salío.

    Gracias por responder, sé que cada día aprenderé más.

    Saludos y bendiciones :)

    También gracias a todos los que respondieron. Les agradesco mucho.

    Wednesday, January 09, 2013 8:46 PM