Tabla Pivot

Tabla Pivot

Postby cmsoft » Mon Sep 05, 2022 2:30 pm

Estimados:
Existe alguna función para tablas pivot para TDolphin o Mysql nativa?
Hice una adaptación de las funciones de ADO pero no quiero reinventar la rueda.
Agradezco comentarios
Dejo aquí el ejemplo
Code: Select all  Expand view
*
#include "FiveWin.Ch"
#include "ord.ch"
#include "xbrowse.ch"
#include "tdolphin.ch"
//----------------------------------------------------------------------------//
function Main()
   local oQry, oCn
   local cServer := 'localhost', cUser := 'root', cPassword := 'secret', cDBName := 'test', nPort := "3306"
   FWCONNECT oCn HOST cServer USER cUser PASSWORD cPassword DB cDBName PORT VAL(nPort)
   oQry := PivotDolphin( oCn, 'PVTDATA', 'REGION', 'PRODUCT', 'SALES', 'COUNT')  
   xbrowse(oQry)
return nil

//----------------------------------------------------------------------------//

function PivotDolphin(oCn, cTable, cRowFld, cColFld, cValFld, cAggrFunc )

   local cSql,  n, oQry
   
   oQry     := oCn:Query("SELECT DISTINCT " + cColFld + " as col FROM " + cTable + " DST")
   if ( n := At( " AS ", cRowFld ) ) > 0
      cRowFld     := Left( cRowFld, n + 3 ) + ;
                     FW_QuotedColSQL( AllTrim( SubStr( cRowFld, n + 4 ) ) )
   else
      cRowFld     := FW_QuotedColSQL( cRowFld )
   endif

   if ( n := At( " AS ", cColFld ) ) > 0
      cColFld  := Trim( Left( cColFld, n - 1 ) )
   endif

   cSql  := "SELECT " + cRowFld
   do while !oQry:Eof()
      cSql  += ", " + cAggrFunc + "( CASE WHEN " + cColFld + " = " + ClipValue2Sql( oQry:col ) + " THEN " + cValFld + " ELSE 0 END ) AS " + ;
            If( ValType( oQry:col ) == 'C', FW_QuotedColSQL( oQry:col ), CharRem( "-/.", "COL_" + cValToChar( oQry:col ) ) )
      oQry:Skip()
   enddo

   cSql += " FROM " + cTable + " PVTTBL GROUP BY " + ;
      If( ( n := At( " AS ", Upper( cRowFld ) ) ) > 0, Left( cRowFld, n - 1 ), cRowFld )

return oCn:Query(cSql)
User avatar
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Tabla Pivot

Postby cmsoft » Mon Sep 05, 2022 11:52 pm

En la clase nativa ya la encontre, es oRs:PivotArray(cTable, cRowFld, cColFld, cValFld, cAggrFunc )

En Dolphin, lo que hice está incompleto, ya que muestra la tabla con los resultados agrupados pero no pivotea...
User avatar
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Tabla Pivot

Postby leandro » Tue Sep 06, 2022 10:32 am

Cesar buenos días, estuve tratando de leer en internet para que se utilizar el pivote, pero no logro comprender. Podrías con tus palabras explicar para que sirve o en que casos se utiliza.

De antemano gracias.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Tabla Pivot

Postby cmsoft » Tue Sep 06, 2022 11:58 am

Leandro, gracias por tu interes, la tabla pivot (con mis palabras) sería similar a las tablas dinámicas de Excel
Si tenemos un colección de datos, por ejemplo las ventas de productos de un comercio, y entre los datos tenemos el código de producto y el código de vendedor, poder obtener una tabla cuyas columnas sean variables según los vendedores que hayan vendido algún producto, y las filas sean la cantidad de unidades de cada artículo vendido, o el importe, según el campo que elijamos. Y a su vez, si queremos pivotearla, veríamos como columnas cada articulo vendido, y como filas cada vendedor.
En Ado, Mr. Rao hizo las unas funciones excelentes y son realmente muy útiles para obtener informes de este tipo.
Puedes ver el ejemplo de Mr. Rao en samples\PivotDBF.PRG que muestra la funcionalidad con el xbrowse.
User avatar
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Tabla Pivot

Postby nageswaragunupudi » Sun Sep 18, 2022 3:14 am

In the native class I already found it, it's oRs:PivotArray(cTable, cRowFld, cColFld, cValFld, cAggrFunc )

No. PivotArray(..) is a method of Connection class, not Rowset class.

You can use TDolphin mainly for the entire application. At the same time you can use FWH native lib for some special purposes.

Example
Code: Select all  Expand view

// oServer is Dolphin server object
function MyPivotArray( oServer, cTable, cRowFld, cColFld, cValFld, cAggrFunc )
   local oCn := maria_connect( oServer )
   local aPivot := oCn:PivotArray( cTable, cRowFld, cColFld, cValFld, cAggrFunc )
   oCn:Close()
return aPivot
 
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Tabla Pivot

Postby nageswaragunupudi » Sun Sep 18, 2022 3:17 am

Full source code of ADO pivot array is available in adofuncs.prg.
You can consider converting the code into Dolphin.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Tabla Pivot

Postby cmsoft » Sun Sep 18, 2022 1:07 pm

Muchas gracias Mr. Rao!
User avatar
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 84 guests