Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-06-2007
mramos65 mramos65 is offline
Miembro
 
Registrado: jun 2006
Ubicación: Mèxico
Posts: 26
Poder: 0
mramos65 Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 28-06-2007
mramos65 mramos65 is offline
Miembro
 
Registrado: jun 2006
Ubicación: Mèxico
Posts: 26
Poder: 0
mramos65 Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 28-06-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
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 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.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 28-06-2007 a las 18:49:07.
Responder Con Cita
  #4  
Antiguo 29-06-2007
mramos65 mramos65 is offline
Miembro
 
Registrado: jun 2006
Ubicación: Mèxico
Posts: 26
Poder: 0
mramos65 Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 30-06-2007
Avatar de courtois
courtois courtois is offline
Miembro
 
Registrado: abr 2006
Ubicación: Mexico DF
Posts: 200
Poder: 19
courtois Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 13-07-2007
mramos65 mramos65 is offline
Miembro
 
Registrado: jun 2006
Ubicación: Mèxico
Posts: 26
Poder: 0
mramos65 Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pasar matriz como parámetros bosterito Varios 1 26-11-2006 03:42:40
Pasar Matriz como parametro a un procedimiento Caro Varios 2 28-07-2006 17:20:12
Pasar foto de tabla paradox a otra tabla zugazua2001 Varios 1 09-05-2006 02:15:54
pasar datos de tabla a tabla? danytorres Conexión con bases de datos 6 15-06-2004 18:41:33
como hacceder a un dbGrid como si fuese una matriz[i,j] orfeo OOP 7 28-05-2003 03:53:43


La franja horaria es GMT +2. Ahora son las 06:23:49.


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
Copyright 1996-2007 Club Delphi