PDA

Ver la Versión Completa : Como utilizo count ??


kia
11-10-2008, 18:12:40
Tengo una sola tabla y el count no se hacerlo fubcionar para saber :

Cuantos equipos y modelos hay en los diferentes ciudades.
Campos: equipo, marca, modelo, ciudad. (


Close;
SQL.Clear;
SQL.Add('select Count (equipo,modelo) from '+NomTabla);
sql.Add('group by ciudad');
open


Empleo D6 , componentes IBX, Fireb 1.5
Necesitaria una ayudita soy novato, ademas como puedo hacer visible los resultados.. Muchas Gracias.

enecumene
11-10-2008, 18:14:58
Hola, el COUNT debes aplicarlo por cada campo:

Select Count(campo1), Count(campo2) from Tabla where ...

Saludos.

kia
12-10-2008, 19:53:48
Quizas no me he explicado bien... soy novato... pongo hasta donde he llegado me funciona pero tarda un montonnnnnn.
Me lo podeis arreglar o mejorar para que me tarde menos..gracias.


procedure TEstadillo.Contador(Sender: TObject);
var
mode,mode1:string;
yciudad,zciudad:string;
ncuantos,:integer;
begin

DMTablas.hciudad.First;
while not DMTablas.hciudad.eof do // ciudades
begin //recorre ciudades y cta.equipos
yciudad:=DMTablas.hciudadCIUDAD.Value;
DMTablas.htipos.First;
while not DMTablas.htipos.eof do //tipos de equipos
begin
mode:=DMTablas.htiposTIPO.Value;

With MDOQLME do //query listado general
Begin
Close;
SQL.Clear;
SQL.Add('select Count (*) from EQUIPOS');
SQL.Add('Where CIUDAD=:pciudad');
SQL.Add('AND EQUIPO=:pequipo');
SQL.Add('AND MODELO=:pmodelo');
ParamByName('pciudad').value:=yciudad;
ParamByName('pequipo').value:=mode;
ParamByName('pmodelo').value:=mode1;
sql.Add('group by ciudad,equipo,modelo');
open;
ncuantos:=MDOqLME.fields[0].asinteger;
end;
//guardo los datos en una tabla para verla en un Rxdbgrid
DMTablas.Tcontar.Append;
if ncuantos<>0 then begin //añade solo si hay equipos
if zciudad<>yciudad then //evita repeticion de la ciudad en el RXdbgrid
DMTablas.Tcontar.FieldByName('ciudad').value:=yciudad;
zciudad:=yciudad;
DMTablas.Tcontar.FieldByName('equipo').value:=mode;
DMTablas.Tcontar.FieldByName('marca').value:='---------------';
//DMTablas.Tcontar.FieldByName('modelo').value:='Total -------> ';
DMTablas.Tcontar.FieldByName('modelo').value:=mode1;
DMTablas.Tcontar.FieldByName('cantidad').value:=inttostr(ncuantos);
DMTablas.Tcontar.Post;
end;

DMTablas.hmodelos.next;
end;
DMTablas.htipos.next;
end;
DMTablas.hciudad.next;
end;
end;



Los datos salen asi:

Ciudad equipo marca modelo cantidad
Granada televisores avg 5
televisores mmf 10
Merida televisores avg 2
dvd fer 7
......

Como ya dije soy novato... algun curso..gracias

FGarcia
13-10-2008, 02:40:16
With MDOQLME do //query listado general
Begin Close;
SQL.Clear;
SQL.Add('select Count (*) from EQUIPOS');
SQL.Add('Where CIUDAD=:pciudad');
SQL.Add('AND EQUIPO=:pequipo');
SQL.Add('AND MODELO=:pmodelo');
sql.Add('group by ciudad,equipo,modelo');
ParamByName('pciudad').value:=yciudad;
ParamByName('pequipo').value:=mode;
ParamByName('pmodelo').value:=mode1;
open;
ncuantos:=MDOqLME.fields[0].asinteger;
end;
[/code]





Hola!

1. NOVATO es marca registrada de Caral Enterprises Inc. asi que ojo y te ponga una demanda.
2. No mencionas que motor de bd usas y con que componentes accesas a ese motor ni la version de delphi
3. Solo hago notar que en la sentencia sql que esta en negritas (la puse en esa posicion) tu la tenias al final, despues de pasar los parametros. No se si eso resuelva el problema pero no dejes de comentarnos tus experiencias.

Caro
13-10-2008, 03:11:01
Hola kia, con una consulta y haciendo la agrupación por los campos que necesites debería funcionarte.


With IbQuery do
begin
Close;
SQL.Clear;
SQL.Add('Select ciudad, equipo, modelo, Count(ciudad)');
SQL.Add('From '+NomTabla);
sql.Add('Group by ciudad, equipo, modelo');
open;
end;


Saluditos

enecumene
13-10-2008, 15:46:47
Hola, ya FGarcía y Caro te ha dados buenas respuestas, debería funcionarte y ... ¡Cuidado con lo de Novato!, ¡Es marca registrada como dice el compañero FGarcía! :D :D ;)

Saludos.