Skip to Content
Author's profile photo Felipe Loyola

El poder del Pivot

¿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

Assigned Tags

      9 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Former Member
      Former Member

      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!!!

      Author's profile photo Felipe Loyola
      Felipe Loyola
      Blog Post Author

      Emm...

      No, no es tan complicado.

      En la semana modifico el documento.

      Atte.

      Author's profile photo Jorge Torres
      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

      Author's profile photo Felipe Loyola
      Felipe Loyola
      Blog Post Author

      Si es posible, deberías meter el resultado a una tabla temporal, luego agregar un union y sumar por columna.

      Saludos

      Author's profile photo Mauricio Quintana G
      Mauricio Quintana G

      Excelente post Felipe! ahora el desaparecido es otro jeje, q bueno que andas de vuelta!

      Author's profile photo Former Member
      Former Member

      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

      Author's profile photo Felipe Loyola
      Felipe Loyola
      Blog 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.

      Author's profile photo Former Member
      Former Member

      super, agradezco tu pronta respuesta.  Entiendo el concepto, me cabeceare intentando dar con los atributos y te comento como me va,

      Saludos

      Author's profile photo Jairo Acosta
      Jairo Acosta

      ya no esta disponible el Link ┬┐tendran el documento? me lo comparten por favor.