Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta SQL - Sum - Count - Otros (https://www.clubdelphi.com/foros/showthread.php?t=48416)

BlueSteel 24-09-2007 21:41:17

Consulta SQL - Sum - Count - Otros
 
Hola amigos...

quiero hacer una consulta, pero no se como deberia hacerla...

tengo la siguiente consulta, en donde realizo un filtro de todos los datos que cumplan 3 condiciones.. hasta aquí todo bien.. pero además, necesito agregar u obtener 2 resultados más.. que seria

- Nro de registros que cumplen condicion
- Suma campo Proceso.Pro_Monto que cumplen la condicion

Se como usar el count y el Sum.. pero no se como agregarlos a esta consulta para que me arroje todos los datos que necesito...

o necesitaría realizar las consultas en forma separada (1 para mostrar y otra para realizar los calculos)

Código Delphi [-]
     AQ_Select.Close;
     AQ_Select.SQL.Clear;
     AQ_Select.SQL.Add('Select * From Personal, Proceso');
     AQ_Select.SQL.Add('Where Personal.Per_Nro=Proceso.Per_Nro');
     AQ_Select.SQL.Add('And (Proceso.Pro_Fecha=:Var1) And (Proceso.Pro_Tipo=:Var2) And (Proceso.Pro_Area =:Var3)');
     AQ_Select.SQL.Add('Order By Proceso.Per_Nro');
     AQ_Select.Parameters[0].Value := Concat(FormatDateTime('mm',Fecha.Date),'-',FormatDateTime('yyyy', Fecha.Date));
     AQ_Select.Parameters[1].Value := 'L';
     AQ_Select.Parameters[2].Value := Area.Text;
     AQ_Select.Open;

espero que me entienda... ahh.. es para sqlserver 2000:o

BlueSteel 24-09-2007 21:45:38

Aqui tendria la consulta que me arroja los calculos...

Código SQL [-]
SELECT     COUNT(Proceso.Per_Nro) AS Numero, SUM(Proceso.Pro_Monto) AS Total
FROM         Proceso INNER JOIN
                      Personal ON Proceso.Per_Nro = Personal.Per_Nro
WHERE     (Proceso.Pro_Fecha = '09-2007') AND (Proceso.Pro_Tipo = 'L') AND (Proceso.Pro_Area = 1)


la idea es unir la anterior con esta para que además de los resultados me muestre el listado de registros que cumpla la condicion...

se podra hacer

luisgutierrezb 24-09-2007 21:53:58

con subconsultas, seria algo asi:

Código SQL [-]
Select campos,
(SELECT     COUNT(Proceso.Per_Nro)
FROM         Proceso INNER JOIN
                      Personal ON Proceso.Per_Nro = Personal.Per_Nro
WHERE     (Proceso.Pro_Fecha = '09-2007') AND (Proceso.Pro_Tipo = 'L') AND (Proceso.Pro_Area = 1) ) as Cantidad, 
(SELECT     COUNT(Proceso.Per_Nro) AS Numero, SUM(Proceso.Pro_Monto) AS Total
FROM         Proceso INNER JOIN
                      Personal ON Proceso.Per_Nro = Personal.Per_Nro
WHERE     (Proceso.Pro_Fecha = '09-2007') AND (Proceso.Pro_Tipo = 'L') AND (Proceso.Pro_Area = 1) ) as Suma
From tablas
Where opciones

ContraVeneno 24-09-2007 23:27:24

Solo como comentario:

Trata de evitar lo más que puedas el usar "Select *". Puede que base tu programación según el orden de los campos. Pero puede suceder que cambies la tabla por una cosa o por otra y el orden de "Select *" va cambiar y vas a tener que cambiar el programa.

Eso entre muchas otras cosas. Así que como recomendación, evita utilizar "select *"

Ivanzinho 25-09-2007 10:18:11

Código SQL [-]
Select campos1, campo2, .., campoN,COUNT(Proceso.Per_Nro) AS Numero, SUM(Proceso.Pro_Monto) AS Total
from personal Per inner join proceso Pro on Pro.Per_no = Per.Per_no
where(Proceso.Pro_Fecha = '09-2007') AND (Proceso.Pro_Tipo = 'L') AND (Proceso.Pro_Area = 1)
group by campo1, campo2, .., campoN

Un saúdo

BlueSteel 10-10-2007 18:23:13

Cita:

Empezado por Ivanzinho (Mensaje 233569)
Código SQL [-]Select campos1, campo2, .., campoN,COUNT(Proceso.Per_Nro) AS Numero, SUM(Proceso.Pro_Monto) AS Total
from personal Per inner join proceso Pro on Pro.Per_no = Per.Per_no
where(Proceso.Pro_Fecha = '09-2007') AND (Proceso.Pro_Tipo = 'L') AND (Proceso.Pro_Area = 1)
group by campo1, campo2, .., campoN




Un saúdo


Probe tu consulta... pero en realidad no me sirve, ya que si bien me arroja todos los resultados, los totales tanto del Count como del Sum, son errados..

el Count siempre me entrega 1, y el Sum siempre me entrega el valor del Monto...


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

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