Ayuda: ¿Como agrupar ciertos registros por un monto? (QUERY)

196 views
Skip to first unread message

Alejandro Garcia G.

unread,
Feb 2, 2017, 9:35:17 AM2/2/17
to Comunidad de Visual Foxpro en Español
Saludos a todos.

Tengo una duda, no se que me recomiendan, deseo hacer una consulta a una tabla de contabilidad en donde me agrupe ciertas cuentas por tercreo pero, si el monto de un registros es inferior a X cantidad se debe agrupar no con el codigo del tercero sino con uno estandar. Mi inquietud radica en si ¿esto se puede hacer en una sola consulta o en varias?

Ejemplo:
Codigo          nombre          valor
1                  a                   10
2                  b                    1000
3                  c                    800
4                  d                    20
2                  b                   100

El resultado para mi debe ser:
Codigo          nombre          valor
2                  b                   1100
3                  c                     800
99                a                       30  => Acá me agrupo los valores menores a 100 y el codigo mostrado en este caso es 99

Esto es por poner un ejemplo.

Base de datos MySQL, VFP9 SP2, Windows 8.1

Carlos Miguel FARIAS

unread,
Feb 2, 2017, 12:20:20 PM2/2/17
to Grupo Fox
Prueba con esto:

SELECT Q.codigo, Q.nombre, SUM(M.valor);
    FROM tuTablaCuentas AS Q INNER JOIN tuTablaMueve AS M ON (Q.Codigo = M.Codigo;
    GROUP BY codigo, nombre
    HAVING SUM(valor) >= 100
UNION
SELECT 99, "las menores de 100", SUM(valor);
    FROM (SELECT codigo, SUM(valor) as valor FROM tuTablaMueve;
               GROUP BY codigo HAVING SUM(valor) < 100)

No me quedo claro si los movimientos ya vienen sumados por cuenta o no.
Saludos: Miguel, La Pampa (RA)
Larga Vida y Prosperidad
Que la Fuerza los acompañe

Alejandro Garcia G.

unread,
Feb 2, 2017, 1:14:22 PM2/2/17
to Comunidad de Visual Foxpro en Español
Gracis Miguel voy a ensayas. sobre la sumatoria no, no viene sumados, son N registros de cada moviiento de cada codigo.

Gracias nuevamente

mpulla

unread,
Feb 5, 2017, 2:16:36 PM2/5/17
to Comunidad de Visual Foxpro en Español
Hola Alejandro

Prueba esta variante

SELECT codigo, nombre, sum(valor)
 From 
(
select Case WHEN valor < 100 THEN '99' ELSE codigo END As codigo
     , Case WHEN valor < 100 THEN 'nombre de tercero' ELSE nombre END As nombre
     , valor
 From cuentas
) t
  GROUP BY codigo, nombre

Saludos.
Mauricio

Jorge Kiernan

unread,
Feb 6, 2017, 5:23:23 PM2/6/17
to publicesvfoxpro
La segunda opcion no creo que funcione, ya que el requisito de agrupar se refiere al resultado de sumar todos los casos del codigo, no a su valor individual, es decir que si tengo cuatro ocurrencias de un mismo codigo que individualmente tienen un valor de por ejemplo 30, 35, 62, 22,  aunque cada una es inferior a 100, la suma supera ese piso y debe ser presentada individualmente.
Por otro lado, la primera opcion, de un doble selec (y en definitiva, el UNION termina siendo eso) me suena más lento que dos pasos sucesivos, el primero contra todo el universo de datos agrupando por codigo con el total de importe, y luego contra ese resultado (necesariamente un universo drasticamente más reducido) un 2do paso de publicación de los que pasaron el piso de importe + el resto agrupado.
Reply all
Reply to author
Forward
0 new messages