Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   consulta agrupada y ordenada (https://www.clubdelphi.com/foros/showthread.php?t=59824)

ZLEON 10-09-2008 04:13:52

consulta agrupada y ordenada
 
Buen dia,

Solicito su colaboracion tengo una tabla de la siguiente manera

Tabla Ventas

NombreSub TipoPlan Min NomPlan
william prepago 3100000 Espec
mario pospago 3100000 plan135
William pospago 313 practic

Necesito agrupar la cantidad de ventas por cada Subdistribuidor y tipo de plan y que me lo ordene por cantidad de pospagos
osea los siguiente



Nomsub prepago pospago
William 3 4
Mario 2 5

MUCHAS GRACIAS

ZULEMA LEON

kuan-yiu 10-09-2008 08:33:56

Pues con un "group by" y un "union". Hay otras soluciones pero creo que te vale algo así:
Código SQL [-]
select NombreSub, sum(prepago), sum(pospago)
from
(select NombreSub, 1 as prepago, 0 as pospago
from tabla
where tipoplan='prepago'
union
select NombreSub, 0 as prepago, 1 as pospago
from tabla
where tipoplan='pospago')
group by Nomsub
order by 3

cyberpek 19-11-2008 14:25:17

el group by me tira error y nose por que :(

Les comento, tengo una tabla contrato que tiene datos ente los cuales esta fecha y total(valor del contrato)
Luego tengo una tabla factura(que es por el alquiler de unos stand) que entre los datos tambien tengo fecha y total
Entonces yo quiero saber para cada fecha, la fecha en si y el total facturado ese dia y realizo la siguiente consulta

select p.fecha as Fecha, sum(p.monto) as Total
from pabelloncontratado p
union
select f.fecha as Fecha, sum(f.total) as Total
from factura f
group by 1

y me pone lo siguiente: Group by es requerid when both aggregate and non-aggregate fields are used in result set
Por lo que entiendo me dice que necesito usar el group by, pero lo estoy usando, quise poner parentesis y me tira error. Estoy usando paradox
Espero que me puedan ayudar
Gracias

Lepe 19-11-2008 14:39:15

Código SQL [-]
 
select p.fecha as Fecha, sum(p.monto) as Total
from pabelloncontratado p
union 
select f.fecha as Fecha, sum(f.total) as Total
from factura f
group by p.fecha

Como regla nemotécnica: Siempre que uses un group by, debes poner todos los campos del select en dicha cláusula, excepto aquellas que usen una función.

Ejemplito:
Código SQL [-]
select nombre, apellidos, direccion, sum(total_facturado)
from tabla 
group by nombre, apellidos, direccion
Si la consulta no da el resultado que deseas, entonces tienes que hacer subconsultas, uniones y "cosas raras" ;)

Obviamente lo suyo es un manual SQL y aprender estas cosas bien.

Saludos

cyberpek 19-11-2008 15:19:11

Hola, yo sabia que cuando se usa el group by tiene que ir los campos que no son funcion, yo puse group by 1, ya que renombro al campo fecha, no se me ocurre como poder hacerlo de otra manera, espero que me puedan ayudar. Lo hice como me decias vos de usar group by p.fecha pero me sigue diciendo lo mismo.
Desde ya gracias


La franja horaria es GMT +2. Ahora son las 15:28:10.

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