Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Pasar tabla a matriz con dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=45077)

mramos65 21-06-2007 22:29:26

Pasar tabla a matriz con dbgrid
 
Hola a todos:

Solicito su gran ayuda para pasar datos de una tabla que contiene los campos:
modelo, talla , color
a una matriz donde obtenga en las filas los colores y en las columnas las tallas dando como resultado en la interseccion la cantidad por talla.

Lo he intentado poniendo una consulta con query

Código SQL [-]
SELECT distinct(color), count(talla)
FROM invent.dbf
group by color




y solo obtengo el conteo por talla pero no puedo acomodarlos en la talla que le corresponde Ej.
COLOR/ TALLA__1 2 3
NEGRO_________3 5 2
AZUL___________5 2 6

Saludos y gracias anticipadas por la ayuda

mramos65 28-06-2007 01:53:12

Hola a todos:

En vista de la nula aportacion me he visto en la necesidad de replantear la pregunta, tal vez no fui lo suficientemente claro y segui intentando por mi cuenta:

se trata de una rutina que como mencione tiene una tabla que contiene modelo, talla y color.
en el dbgrid quiero obtener estos datos en forma matricial para lo cual hago lo siguiente:
  1. identifica el modelo y lo busca en la tabla articulos del cual extrae el grupo de tallas al que pertenece.
  2. pone en el dbgrid las tallas que conforman el grupo en las columnas.
  3. Para obtener en los renglones solo los colores una sola vez agrego un Datasource al Dbgrid y un Query en el cual se aplica una consulta
Código SQL [-]
SELECT DISTINCT color, count(talla)
FROM invent.dbf
where talla='30'
GROUP BY COLOR




en la que DISTINCT permite que aparezca una sola vez el color aunque se repita N veces y COUNT (talla) acumula el conteo de las tallas en la tabla y
para obtener una talla especifica utilizo la condicion WHERE.
sin embargo solo puedo obtener en la columna 'count of talla' el resultado de la condicion WHERE y no en la columna que le corresponde a cada talla.
Si alguien puede ayudarme un poco mas lo agradecere bastante.

SALUDOS:o

egostar 28-06-2007 03:32:57

Cita:

Empezado por mramos65
En vista de la nula aportacion me he visto en la necesidad de replantear la pregunta, tal vez no fui lo suficientemente claro y segui intentando por mi cuenta:

Si te fijas un poco, ha habido varios compañeros que han entrado a ver el tema, si no se te contesta no es que haya una nula aportación, mas bien es un poco compleja tu pregunta.

Lo que planteas, no veo como hacerlo desde una simple consulta, al menos yo no lo veo tan claro:rolleyes: pero en base a tu primer post, te recomiendo que trates con esto:

Creas 3 Querys.

Query1
Código SQL [-]
SELECT distinct(talla)
FROM invent.dbf

Query2
Código SQL [-]
SELECT distinct(color)
FROM invent.dbf

Query3
Código SQL [-]
SELECT talla, color,  count(color) as cantidad
FROM invent.dbf
group by talla,color

Edito: En Query3, no es necesario usar DISTINCT para obtener la información.

Hasta aqui, tendremos 3 consultas que nos van a dar la pauta para poder crear lo que deseas.

Agrega un TStringGrid a tu forma y un Botón

En el Botón pon este código

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  i,j : Integer;
begin
  StringGrid1.ColCount := Query1.RecordCount+1;
  StringGrid1.RowCount := Query2.RecordCount+1;
  for i := 0 to Query1.RecordCount-1 do begin
      StringGrid1.Cells[i+1,0] := 'Talla '+Query1.Fields[0].AsString;
      Query1.Next;
  end;
  for i := 0 to Query2.RecordCount-1 do begin
      StringGrid1.Cells[0,i+1] := Query2.Fields[0].AsString;
      Query2.Next;
  end;
  for i := 0 to Query1.RecordCount-1 do begin
      for j := 0 to Query2.RecordCount-1 do begin
          StringGrid1.Cells[i+1,j+1] := Query3.Fields[2].AsString;
          Query3.Next;
      end;
  end;
end;

Me imagino que hay algo mas elegante, pero ya los compañeros del foro te podrán dar mejores respuestas.

Salud OS.

mramos65 29-06-2007 18:42:33

Pasar tabla a Matriz con Dbgrid
 
Hola egostar:

Te agradezco mucho el apoyo, lo estoy probando y me parece muy bien y mas que nada las orientacion que me das, es una excelente idea, espero adaptarla para mi proposito y les devuelvo la solucion a la que llegue.

courtois 30-06-2007 11:16:15

para verlo bonito, puedes usar un PivotTable o un en un reporte de FastReport o ReportBuilder usando un CrossTab, lo que quieres mostrar es simplemente un tabular cruzado, esto se debe hacer con herramientas olap checa este link http://bdn1.borland.com/article/borc...l#_Toc35662799

mramos65 13-07-2007 23:56:17

Hola a todos, aqui de nuevo:

Disculpen la insistencia de hacerlo en DbGrid pero es algo que quiero hacer y espero pueda realizarlo con su gran ayuda.
He hecho algunos cambios obteniendo lo siguiente: me da los resultados parciales sin embargo los no puedo obtenerlos todos al mismo tiempo en pantalla, alguien tiene una sugerencia?


Código Delphi [-]procedure TForm1.Button1Click(Sender: TObject);
begin
for j := 0 to 10-1 do begin
numtalla:=Query1.Fields[j].AsString;
Close;
Query3.SQL.Clear;
Query3.SQL.add('SELECT distinct(color),count(talla)as'+numtalla);
Query3.SQL.add('FROM invent');
Query3.SQL.add('WHERE talla='+ #39+numtalla+#39);
Query3.SQL.add('GROUP BY color, talla');
Query3.OPEN;
SLEEP(1000);
Query3.Next;
end;
end;




SALUDOS


La franja horaria es GMT +2. Ahora son las 21:43:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi