Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Contar Dtos en un SQl (https://www.clubdelphi.com/foros/showthread.php?t=34192)

IVAND 31-07-2006 19:16:19

Contar Dtos en un SQl
 
Hola a todos

Trabajo en delphi 6 y Firebird 1.5

Quien me da luz con lo siguiente

Tengo varios vendedores , varias facturas, varios productos vendidos en esas facturas, pues bien

El select que debo hacer debe contar las veces que un producto es vendido pero no con count ejemplo en dos facturas he vendido dos producto diferentes pero uno dos veces y el otro tres , si sacara un count me diria que vendi 5 veces esos dos productos y estaria correcto pero lo que yo busco es que me diga que esos productos fueron vendidos solo 2 en otras palabras las veces que me agrupa un producto y luego contarlas

Vendedor 1 veces
Peras 500
Manzanas 100
Melones 20

Total de vendidos 3

Vendedor 2 veces

Peras 500
Manzanas 100

Total vendido 2


Entonces el query lo que me debe arrojar es

Vendedor 1 3
Vendedor 2 2

De antemano gracias

vtdeleon 31-07-2006 19:26:16

Saludos

Prueba esto:
Código SQL [-]
select vendedor, count(articulo) as Cantidad
from factura
group by Idvendedor

IVAND 03-08-2006 01:45:49

Eso esta bien pero no funciona , porque cuando cuento los producto este me cuanta pero las cantidades que se venden un producto y asi no es , debe ser que aunque tenga 100 productos vendidos de un solo codigo este debe arrojarme el valor de uno

Sick boy 03-08-2006 08:10:31

Para que te demos el sql correcto debes indicar más datos, como los campos que tienes en la tabla.

Mientras, intenta esto:
Código SQL [-]
select id_venta,vendedor, count(distinct(articulo)) as Cantidad
from factura
group by vendedor,id_venta

Aunque creo que tendras que hacer dos consultas, o un store procedure, ya que la consulta anterior te dará una linea por cada ticket de venta, y creo que despues de eso quieres sumarlo, verdad???

vtdeleon 03-08-2006 16:20:28

Cita:

Empezado por Sick boy
Aunque creo que tendras que hacer dos consultas, o un store procedure, ya que la consulta anterior te dará una linea por cada ticket de venta, y creo que despues de eso quieres sumarlo, verdad???

Creo qeu estás en lo cierto. Nuestro amigo IVAND tendrá que realizar una consultar con "Select's" anidados. FireBird lo soporta!

Código SQL [-]
Select vendedor, count(Select idvendedor, count(idarticulo) 
                                 from factura FactB
                                 group by Idvendedor) as Cantidad
from factura FactA.idvendedor=factb.idvendedor
Where Fact.
group by Idvendedor
Esta consulta la he hecho rápido, puede que tenga algun error. Podria servirte de guía.

IVAND 03-08-2006 22:27:59

A todos gracias por la respuesta

Lo que se me ocurre pero de seguro existe algo mejor es de mediante un bucle barrer todos los datos y agruparlos por vendedor contado de esta manera las lineas de productos que vendio cada vendedor e insertarlo en una tabla temporal

Sick boy 03-08-2006 22:33:20

Cita:

Lo que se me ocurre pero de seguro existe algo mejor es de mediante un bucle barrer todos los datos y agruparlos por vendedor contado de esta manera las lineas de productos que vendio cada vendedor e insertarlo en una tabla temporal
No te lo tomes a mal, pero ¿ es que no has visto las soluciones que te hemos dado??

Los selects anidados pueden darte el resultado en un solo query.
Yo no estoy muy puesto en selects anidados, y tu no das ningún dato sobre los campos de las tablas.

Tomate un tiempo en reformular la pregunta añadiendo toda la información posible, y revisa los selects anidados, subconsultas y/o stores procedures, ya que con eso seguro que lo puedes resolver.

O también puedes hacer un bucle como dices, pero eso ya no es SQL.

IVAND 03-08-2006 23:25:35

Nuevamente gracias a todos por las respuestas el query quedo algo asi ,

Código SQL [-]
Select v1.nombre nomb_ven,count(distinct(key_producto_b)) as Nveces, sum(d.cantidad) TcantVend,
sum(total_linea) tventa,Round(sum(d.cantidad*d.precio_prom),2) Tcosto,
Round(sum(d.total_linea-d.precio_prom*d.cantidad),2) Util
from vendedor v1,cab_fac c,det_fac d
Where c.estado_fac='T'
and extractDate(c.fec_factura) between :desde and :hasta
and c.key_vendedor=v1.key_vendedor
And c.key_cab_fac=d.key_cab_fac

Group by v1.nombre
Order by 1


La franja horaria es GMT +2. Ahora son las 06:26:22.

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