Skip to Content

¿Alguna vez han tenido el requerimiento de mostrar datos en columnas como meses, o que los socios de negocios
aparezcan como columnas en vez de filas?

Bueno si ese es su problema, la función PIVOT es su solución.

Link al documento: El poder del Pivot

Saludos

FLR

To report this post you need to login first.

8 Comments

You must be Logged on to comment or reply to a post.

  1. Antonio Torres Espinosa

    Que tal Felipe!

    Muchas felicidades por tu post, es muy buena encontrarse esa información por aqui.

    Estoy tratando de hacer una ligera modificación en tu query pero no lo logro conseguir.

    Sería exactamente al revez jeje

    En la filas tener los meses y las columnas las cuentas.

    Ejemplo

                 Cuenta Banco1

    Enero     150,000

    Febrero   238,000

    ¿Sabes que tan complicado podría ser mostrarlo así?

    Saludos!!!

    (0) 
  2. Jorge Torres

    Felipe Excelente post mil gracias, solo me gustaría saber si hay forma de sumar los meses para tener el total por línea. Saludos

    (0) 
      1. Cristobal Cadiz

        Excelente Post.  He utilizado el query con algunas adaptaciones, pero ¿Como puedo agrupar las cuentas?, algo así como un estado de resultado. agruparlas por tipo. Ej: cuenta1; Arriendo de maquinaria  y Cuenta2; Mantención de Maquinaria. Y sumadas  me arroje  ‘Servicio Maquinaria’.

        SELECT P.[Codigos],P.[Cuenta],  P.[Nombre], P.[CCosto],

        (isnull([1],0)+isnull([2],0)+isnull([3],0)+isnull([4],0)+isnull([5],0)+isnull([6],0)+isnull([7],0)+isnull([8],0)+isnull([9],0)+isnull([10],0)+isnull([11],0)+isnull([12],0)) ‘Acumulado’ ,

        [1] as [Ene], 

        [2] as [Feb], 

        [3] as [Mar], 

        [4] as [Abr], 

        [5] as [May], 

        [6] as [Jun], 

        [7] as [Jul], 

        [8] as [Ago], 

        [9] as [Sep], 

        [10] as [Oct], 

        [11] as [Nov], 

        [12] as [Dic]

        FROM ( 

        SELECT T0.Account AS Cuenta ,  T1.AcctName AS Nombre, T2.PrcCode as Codigos, T2.PrcName AS CCosto, MONTH(T0.RefDate)’Month’, SUM(T0.Credit-T0.Debit)’CargoAbono’

        FROM dbo.JDT1 T0 

        INNER JOIN dbo.OACT T1 ON T1.AcctCode=T0.Account 

        LEFT JOIN dbo.OPRC T2 ON T2.PrcCode=T0.ProfitCode 

        WHERE YEAR(T0.RefDate)=2013 AND T1.GroupMask BETWEEN  1 AND 8 

        GROUP BY  T0.Account, T1.AcctName, T2.PrcCode,T2.PrcName, MONTH(T0.RefDate) 

        ) P 

        PIVOT ( 

        SUM(CargoAbono)  

        FOR [Month] IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) 

        ) P 

        ORDER BY P.[Codigos], P.[Cuenta], P.[CCosto]

        Muchas Gracias

        (0) 
        1. Felipe Loyola Post author

          Cristobal, lo que necesitas si es posible.

          Para ello necesitas que las cuentas tengan un “atributo” en comun. Con ese atributo debes pivotear para agrupar las cuentas para crear totales.

          ejemplo

          DECLARE @ANIO SMALLINT 

          SET @ANIO = (SELECT A.Year FROM dbo.OACP A WHERE A.Year=‘[%0]’)  

          SELECT P.[ATRIBUTO],  P.[NOM_ATRIBUTO], P.[CCosto], 

          [1] as [Ene], 

          [2] as [Feb], 

          [3] as [Mar], 

          [4] as [Abr], 

          [5] as [May], 

          [6] as [Jun], 

          [7] as [Jul], 

          [8] as [Ago], 

          [9] as [Sep], 

          [10] as [Oct], 

          [11] as [Nov], 

          [12] as [Dic] 

          FROM ( 

          SELECT T0.ATRIBUTO, T0.NOM_ATRIBUTO, T0.Account AS Cuenta ,  T1.AcctName AS Nombre, T2.PrcName AS CCosto, MONTH(T0.RefDate)‘Month’, SUM(T0.Credit-T0.Debit)‘CargoAbono’ 

          FROM dbo.JDT1 T0 

          INNER JOIN dbo.OACT T1 ON T1.AcctCode=T0.Account 

          LEFT JOIN dbo.OPRC T2 ON T2.PrcCode=T0.ProfitCode 

          WHERE YEAR(T0.RefDate)=@ANIO AND T1.GroupMask BETWEEN 6 AND

          GROUP BY T0.Account, T1.AcctName, T2.PrcName, MONTH(T0.RefDate) 

          ) P 

          PIVOT ( 

          SUM(CargoAbono)  

          FOR [Month] IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) 

          ) P 

          ORDER BY P.[Cuenta], P.[CCosto] 


          Atte.

          (0) 

Leave a Reply