Programación General > Visual Basic 6.0 e inferiores

 Cuantos Hay De X Campo De La Tabla Sent.sql

<< < (2/6) > >>

UserCode:
muchas gracias F_Tanori es precisamente la sentencia que debia tener y que gracias a tu super codigo  :P  se cumple la consulta en un 80%  :comp:

Arroja una precisa consulta en CANT, sé que al compararlo con como está el de excel, los campos ACT, TALLER y Km Rec no son iguales, pero esa sentencia es mejor que cualquier intento que yo haya hecho.

Me puse en la celda de la columna CANT, la que dice por ejemplo:
[AUTOGAS         ][      3]  <-- esta celda

Tiene esto:
=CONTAR.SI($C$7:$C$32;"Autogas")+CONTAR.SI($I$7:$I$32;"Autogas")

En la de ACT con un 2 dice:
=SUMA(SI($D$7:$D$32="activa";SI($C$7:$C$32="Autogas";1;0)))+SUMA(SI($J$7:$J$32="activa";SI($I$7:$I$32="Autogas";1;0)))

E igual con la columna TALLER en donde sale un 1 dice:
=SUMA(SI($D$7:$D$32="Taller";SI($C$7:$C$32="Autogas";1;0)))+SUMA(SI($J$7:$J$32="Taller";SI($I$7:$I$32="Autogas";1;0)))

Bueno, yo de excel no sé mucho, calculos básicos, no me habia posicionado en las celdas para ver la formula, pero se ve que además del COUNT, se necesita metersele el SUM para ver si la consulta, arroja las sumas de ACT, TALLER ya que al parecer esas columnas no son COUNT sino SUM.

Muchas gracias por la SQL en verdad que me hacia mucha falta  :comp:

EDITANDO:

Un screenshot de la consulta:


Por ejemplo en la Tabla hay 11 veces ACTIVA pero hay solo 2 ACTIVAS referentes a AUTOGAS, y MIXTO hay 2 pero uno tiene ACTIVA, y el otro TALLER, verdad que es un infierno esta consulta, estoy totalmente de acuerdo en eso, me lleva  :(


Si todo esto se complica mucho, yo creo que dejaria la sentencia hasta donde se refleja la consulta de CANT en donde sirve bien el COUNT y haria otra tabla para ver si con otra sentencia en base a COUNT (pero para esta otra tabla) podría tal vez hacer lo de los otros datos.  Voy a esperarme haber alguna sugerencia antes de hacerlo :) porque ya me ha pasado antes hacer algo, y luego por alguna mejor solucion o cambio de cosas que me dicen, termino borrandolo convirtiendose asi en un tiempo perdido :(

UserCode:
hehehe... "demasiadas continuaciones de linea" es lo que me saco el VB por poner tantos & _
porque ver toda esa gigante SQL en una sola linea, huy me vuelvo loco :D  hehehe...
A la final también sé que VB tiene limites en todo, ya antes me paso algo asi con una SQL largota, VB no permitio más alargarla horizontalmente o algo asi, asi que como que mejor no me complico más con eso.

bueno, estaba alargando mucho la SQL para ver si lograba la cuestion, pero como que si me va a tener que tocar hacer otra tabla exclusiva para procesar este tipo de consulta, odio las cosas que vienen de Excel, pero que se le va a hacer, ni modo  :(

F_Tanori:
Hola UserCode

En excel los datos estan acomodados asi
numero|uso|condicion|km ...etc... esa misma tabla se repite a un costado

lo que hace es que son dos tablas (almenos las que se alcanzan a ver)


pero en la base de datos esto no funciona asi los registros irian hacia abajo en una sola tabla entonces segun veo en la formula

te posicionaste en la celda E42 y te aparece la formula

=SUMA(SI(D7:D32="activa";SI(C7:C32="Autogas";1;0)))
+SUMA(SI(J7:J32="activa";SI(I7:I32="Autogas";1;0)))

En relidad no esta sumando (si pero no :P)

Esta contando...

Esta contando todas las unidades que sean ACTIVAS en el rango D7:D32 (que es la primera tabla la que tiene datos en la columna de condicion)... SI(C7:C32="Autogas";1;0) en esta parte indica  que si es Autogas entonces la CUENTE (devuelve 1+1+1... cuando sea autogas ) si no devuelve 0 entonces no es suma sino incremento osea CONTAR :) donde si hay una suma es en

+SUMA(SI(J7:J32="activa";SI(I7:I32="Autogas";1;0))) esa es una suma pero es una suma de totales porque es la misma formula de la tabla 1 (B7:G32) y la tabla 2 (H7:M32) es decir son el total de activas en las dos tablas... para ese tipo de vehiculo lo cual se debe repetir para cada vehiculo en la tabla de resumen

Haz la prueba agregando en la celda I7 Autogas y en la celda J7 Activa la celda
D42 debe de valer 4 y la E42 3
(esto si los datos siguen segun la imagen)


Si esta teoria es correcta entonces no es suma es conteo y si son conteo y aplicas la sentencia que te envie debe funcionar, yo lo probe es mas te envio una prueba sale

Ademas


--- Citar ---Bueno, yo de excel no sé mucho, calculos básicos, no me habia posicionado en las celdas para ver la formula, pero se ve que además del COUNT, se necesita metersele el SUM para ver si la consulta, arroja las sumas de ACT, TALLER ya que al parecer esas columnas no son COUNT sino SUM.
--- Fin de la cita ---


Sum seria si tuvieras valores numericos, como los kilometros eso si los puedes sumar pero como sumarias ACTIVA+ACTIVA  TALLER+TALLER en relidad es conteo




Suerte

UserCode:
Si, tienes razón está contando me deje llevar por lo del SUM de la formula  :rolleyes:


--- Citar ---En excel los datos estan acomodados asi
numero|uso|condicion|km ...etc... esa misma tabla se repite a un costado

lo que hace es que son dos tablas (almenos las que se alcanzan a ver)

--- Fin de la cita ---

Si, es que es porque una mitad es por ingreso de Sucursal, y la otra mitad es por Mes, se ve arriba en la imagen completa del excel en el primer post, yo en vez de hacer dos tablas lo que normalmetne hago en esos casos, es agregar un campo más, es decir, dos tablas con 6 o 7 campos iguales es muy redundante, yo agarro, fusiono en una sola tabla pero agrego un campo o dos más, en la Tabla hay un campo Sucursal y otro Mes, de hecho, la Sucurlsa y el Mes siempre se indican en otra ventanita de inicio, se selecciona de unos Combobox, de una lista, y cualquier consulta sea por Sucursal o por Mes, las filtro por SQL con eso de WHERE Campo='Dato' o Where Campo= & variable y cosas asi.

De hecho, hay otra sección del archivo Excel donde hay dos tablas igualitas, a diferencia que una tiene un campo más, ahí yo hice una sola Tabla en la BD, pero con un campo más.. y en la ventana en VB es un Checkbox, guarda un valor booleano True o False o mejor 0 o 1 y en base a eso se indica la consulta.


--- Citar ---Si esta teoria es correcta entonces no es suma es conteo y si son conteo y aplicas la sentencia que te envie debe funcionar, yo lo probe es mas te envio una prueba sale

--- Fin de la cita ---

Sé que esa SQL es, por eso partiendo de ella voy a (entre ensaño y error) a tratar de hacerles pequeños cambios para ver si da los datos correctos, ya que CANT está bien pero los demas aun no, es decir, yo ya le meti a la Tabla esos mismos datos, estos:


Y al consultar deberia arrojarme algo como esto: (lo que está en Rojo)


Pero al consultar me saca es esto:
(claro está en orden por Order by TxtUso en la SQL a la cual está conectado el MSFlexGrid a diferencia del orden en el Excel, pero si son los mismos datos todos)

En donde solo CANT es igual, el resto no porque el los demas ACT y TALLER tambien están contando como CANT y su conteo es diferente a CANT, es más como por selección más especifico como en la tabla de Access que está en mi post anterior.

Pero como ya habia comentado antes, esa SQL... esa misma es :) solo tengo entonces que (partiendo desde tu SQL) comenzar a editarle por aqui y por allá hasta que saque la misma consulta  :smartass:

F_Tanori:
Hola

De verdad que yo no le veo problema a eso :P

1- lo que necesitas es contar el total de cada unidad


--- Código: Text --- SELECT TR_CTRL_VEHIC_KM.txtuso, Count(TR_CTRL_VEHIC_KM.cond) AS CANTFROM TR_CTRL_VEHIC_KMGROUP BY TR_CTRL_VEHIC_KM.txtuso;  

2- Contar cuantas estan tienen Condicion de Activa


--- Código: Text --- SELECT TR_CTRL_VEHIC_KM.txtuso, Count(TR_CTRL_VEHIC_KM.cond) AS TALLERFROM TR_CTRL_VEHIC_KM WHERE TR_CTRL_VEHIC_KM.cond=&#34;TALLER&#34; GROUP BY TR_CTRL_VEHIC_KM.txtuso;  

3- Contar cuantas estan tienen Condicion de taller


--- Código: Text --- SELECT TR_CTRL_VEHIC_KM.txtuso, Count(TR_CTRL_VEHIC_KM.cond) AS TALLERFROM TR_CTRL_VEHIC_KM WHERE TR_CTRL_VEHIC_KM.cond=&#34;TALLER&#34; GROUP BY TR_CTRL_VEHIC_KM.txtuso;  

4- y Sumar los Kilometros recorridos de cada tipo de unidad

--- Código: Text --- SELECT TR_CTRL_VEHIC_KM.txtuso, Sum(TR_CTRL_VEHIC_KM.kmrec) AS KM_RECFROM TR_CTRL_VEHIC_KM GROUP BY TR_CTRL_VEHIC_KM.txtuso;  
entonces si juntas estas 4 consultas te da


--- Código: Text --- SELECT a.txtuso, Count(a.txtuso) AS CANT, (SELECT Count(TR_CTRL_VEHIC_KM.txtuso) FROM TR_CTRL_VEHIC_KM WHERE TR_CTRL_VEHIC_KM.cond=&#34;Activa&#34;  AND TR_CTRL_VEHIC_KM.txtuso=a.txtuso) AS ACT, (SELECT Count(TR_CTRL_VEHIC_KM.txtuso) FROM TR_CTRL_VEHIC_KM WHERE TR_CTRL_VEHIC_KM.cond=&#34;Taller&#34;  AND TR_CTRL_VEHIC_KM.txtuso=a.txtuso) AS TALLER, (SELECT sum(TR_CTRL_VEHIC_KM.kmact) FROM TR_CTRL_VEHIC_KM WHERE TR_CTRL_VEHIC_KM.txtuso=a.txtuso) AS KMRECFROM TR_CTRL_VEHIC_KM AS aGROUP BY a.txtuso;  
Lo que ocurrio en la tabla que muestras qu te aparecen 11 activas 2 en taller 41780 km es que perdiste la relacion y te esta mostrando el total de activas
sin importarle cual tipo de vehiculos, porque no sabe cual es, por eso las subconsultas llevan


--- Código: Text --- WHERE TR_CTRL_VEHIC_KM.txtuso=a.txtuso  
donde a.txtuso es el campo txtuso de la tabla principal, no se si esto te enrede?



Saludos

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa