none
De registro a columna RRS feed

  • Pregunta

  • Hola tengo una consulta

    Tengo una tabla que es perfiles,en la cual tiene 4 registro con sus respectivos id(telefono ,movil,gratuita,internacional) luego tengo otra de consumos ,en la cual se enlazan por el tiempo

    Quisiera saber como hacer que los registros de perfiles se hagan columna,osea que me diga que persona consumio tanto en cada perfil.

    Gracias

    martes, 21 de marzo de 2017 19:40

Respuestas

  • Franco,

    la forma de pivotear filas a columnas es la sgte:

    - Agrupar (GROUP BY)

    - Regar valores (expresion CASE)

    - Agregar (MIN/MAX/COUNT/etc.)

    Ejemplo:

    select
        C.usu_id,
        C.area_id,
        sum(case when S.descripcion = 'Celular' then C.monto_consumido end) as consumo_Celular,
        sum(case when S.descripcion = 'Consulta' then C.monto_consumido end) as consumo_Consulta,
        sum(case when S.descripcion = 'Gratuito' then C.monto_consumido end) as consumo_Gratuito,
        sum(case when S.descripcion = 'Internacional' then C.monto_consumido end) as consumo_Internacional,
        sum(case when S.descripcion = 'Local' then C.monto_consumido end) as consumo_Local,
        sum(case when S.descripcion = 'Nacional' then C.monto_consumido end) as consumo_Nacional
    from
        consumos as C
        inner join
        salidas as S
        on S.salida_id = C.salida_id
    group by
        C.usu_id,
        C.area_id;    
    GO

    Si las categorias o perfiles pueden cambiar con el tiempo entonces requeriras el uso de SQL dinamico. Puedes buscar en este foro por "pivot dinamico" y encontraras varios ejemplos.

    Si posteas la estructura de las tablas (solo columnas de interes) en forma de sentencias CREATE TABLE, asi como data de ejemplo mediante sentencias INSERT, podriamos ayudarte con el codigo.

    Lo anterior es de mucha ayuda para nosotros pues de lo contrario tendriamos que mal gastar nuestro tiempo replicando tu ambiente.

    Ayudanos para poderte ayudar!


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    • Propuesto como respuesta Joyce_ACModerator miércoles, 22 de marzo de 2017 16:13
    • Marcado como respuesta Joyce_ACModerator martes, 28 de marzo de 2017 15:04
    • Desmarcado como respuesta Franco Vargas viernes, 7 de abril de 2017 16:23
    • Marcado como respuesta Franco Vargas viernes, 7 de abril de 2017 16:23
    miércoles, 22 de marzo de 2017 12:36

Todas las respuestas

  • Hola, podrías postear la estructura de las tablas y algo de data y los resultados esperados,

    al parecer tendrás que utilizar pivot


    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.

    martes, 21 de marzo de 2017 21:02
  • Hola 

    +-----------+---------------+-------------+--------+
    | salida_id | descripcion   | patron      | estado |
    +-----------+---------------+-------------+--------+
    |         1 | Local           |                   |      1 |
    |         2 | Nacional      |                     |      1 |
    |         3 | Internacional |                    |      1 |
    |         4 | Celular        |                         |      1 |
    |         5 | Gratuito      |                         |      1 |
    |         6 | Consulta     |                         |      1 |
    +-----------+---------------+-- -----------+--------+

    Quisier algo asi 

    Usuario  Area  Celular  Consulta  Gratuito  Internacional  Local  Nacional  Total 

    la tabla consumos tb_consumos     consumo_id| numero_origen | numero_destino | area_id | usu_id | saldo_inicial | operador_id | tarifa_llamada  | monto_consumido | tiempo_consumido | saldo_final | llamada_fin| estado | salida_id | perfil_id |

    martes, 21 de marzo de 2017 21:11
  • Franco,

    la forma de pivotear filas a columnas es la sgte:

    - Agrupar (GROUP BY)

    - Regar valores (expresion CASE)

    - Agregar (MIN/MAX/COUNT/etc.)

    Ejemplo:

    select
        C.usu_id,
        C.area_id,
        sum(case when S.descripcion = 'Celular' then C.monto_consumido end) as consumo_Celular,
        sum(case when S.descripcion = 'Consulta' then C.monto_consumido end) as consumo_Consulta,
        sum(case when S.descripcion = 'Gratuito' then C.monto_consumido end) as consumo_Gratuito,
        sum(case when S.descripcion = 'Internacional' then C.monto_consumido end) as consumo_Internacional,
        sum(case when S.descripcion = 'Local' then C.monto_consumido end) as consumo_Local,
        sum(case when S.descripcion = 'Nacional' then C.monto_consumido end) as consumo_Nacional
    from
        consumos as C
        inner join
        salidas as S
        on S.salida_id = C.salida_id
    group by
        C.usu_id,
        C.area_id;    
    GO

    Si las categorias o perfiles pueden cambiar con el tiempo entonces requeriras el uso de SQL dinamico. Puedes buscar en este foro por "pivot dinamico" y encontraras varios ejemplos.

    Si posteas la estructura de las tablas (solo columnas de interes) en forma de sentencias CREATE TABLE, asi como data de ejemplo mediante sentencias INSERT, podriamos ayudarte con el codigo.

    Lo anterior es de mucha ayuda para nosotros pues de lo contrario tendriamos que mal gastar nuestro tiempo replicando tu ambiente.

    Ayudanos para poderte ayudar!


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    • Propuesto como respuesta Joyce_ACModerator miércoles, 22 de marzo de 2017 16:13
    • Marcado como respuesta Joyce_ACModerator martes, 28 de marzo de 2017 15:04
    • Desmarcado como respuesta Franco Vargas viernes, 7 de abril de 2017 16:23
    • Marcado como respuesta Franco Vargas viernes, 7 de abril de 2017 16:23
    miércoles, 22 de marzo de 2017 12:36
  • Me sirvio,disculpa la demora!

    Muchas Gracias!

    viernes, 7 de abril de 2017 16:23