Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-02-2019
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 18
look Va camino a la fama
Sum donde el total sea igual a un valor

hola amigos , tengo la siguiente SQL:

Código SQL [-]
  SELECT
  SUPERVIS.COD_ESC,
  SUPERVIS.COD_SUP,
  VENTAS.COD_FAM,
  SUM(VENTAS.CANT * PRODUCTS.PES_VOL) AS TOTAL
  FROM ZONAS
  INNER JOIN SUCURSALS ON SUCURSALS.COD_ZON = ZONAS.COD_ZON  
  INNER JOIN JEFES ON JEFES.COD_SUC = SUCURSALS.COD_SUC    
  INNER JOIN SUPERVIS ON SUPERVIS.COD_JEF = JEFES.COD_JEF 
  INNER JOIN RUTAS ON RUTAS.COD_SUP = SUPERVIS.COD_SUP 
  INNER JOIN VENTAS ON VENTAS.COD_RUT = RUTAS.COD_RUT
  INNER JOIN PRODUCTS ON PRODUCTS.COD_PROD = VENTAS.COD_PROD
  INNER JOIN FAMILIAS ON FAMILIAS.COD_FAM = VENTAS.COD_FAM
  WHERE 
  DATEPART(MONTH,VENTAS.Fech_fact) = 1
  AND DATEPART(YEAR,VENTAS.Fech_fact) = 2019
  AND SUPERVIS.COD_SUP = 10111 
  AND VENTAS.TIP_DOC NOT IN ( 'z105','z106','z405')
  GROUP BY 
  SUPERVIS.COD_SUP,
  VENTAS.COD_FAM,
  SUPERVIS.COD_ESC

lo que me da el siguiente resultado:



Código:
totalizando: 95,190.35
lo que estoy tratando de hacer:

Código SQL [-]
  SUPERVIS.COD_ESC,
  SUPERVIS.COD_SUP,
  VENTAS.COD_FAM,
  SUM(VENTAS.CANT * PRODUCTS.PES_VOL) AS TOTAL
  FROM ZONAS
  INNER JOIN SUCURSALS ON SUCURSALS.COD_ZON = ZONAS.COD_ZON  
  INNER JOIN JEFES ON JEFES.COD_SUC = SUCURSALS.COD_SUC    
  INNER JOIN SUPERVIS ON SUPERVIS.COD_JEF = JEFES.COD_JEF 
  INNER JOIN RUTAS ON RUTAS.COD_SUP = SUPERVIS.COD_SUP 
  INNER JOIN VENTAS ON VENTAS.COD_RUT = RUTAS.COD_RUT
  INNER JOIN PRODUCTS ON PRODUCTS.COD_PROD = VENTAS.COD_PROD
  INNER JOIN FAMILIAS ON FAMILIAS.COD_FAM = VENTAS.COD_FAM
  WHERE 
  DATEPART(MONTH,VENTAS.Fech_fact) = 1
  AND DATEPART(YEAR,VENTAS.Fech_fact) = 2019
  AND SUPERVIS.COD_SUP = 10111 
  AND VENTAS.TIP_DOC NOT IN ( 'z105','z106','z405')
  GROUP BY 
  SUPERVIS.COD_SUP,
  VENTAS.COD_FAM,
  SUPERVIS.COD_ESC
  HAVING   SUM(VENTAS.CANT * PRODUCTS.PES_VOL) <= 75000

pero la consulta muestra el mismo resultado, al hacer la suma total no se acerca a 75000,
la idea es que me muestre el detalle , donde la sumatoria de todo ese detalle que mostre sea <= 75000.

Me hechan una mano?.

Saludos!
__________________
all your base are belong to us
Responder Con Cita
  #2  
Antiguo 12-02-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que tendrás que hacer un "Stored procedure" con un bucle que vaya sumando mientras la suma sea menor a esa cantidad.
Si lo he entendido bien.
Responder Con Cita
  #3  
Antiguo 12-02-2019
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 18
look Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Creo que tendrás que hacer un "Stored procedure" con un bucle que vaya sumando mientras la suma sea menor a esa cantidad.
Si lo he entendido bien.
si amigo, justo esto pensaba, pero como ultima opcion.
me dan alguna idea del pocedimiento?, estoy pensando hacer un bucle que vaya sumando dia a dia hasta llegar al parametro requerido.
cualquier idea es bienvenida.
__________________
all your base are belong to us
Responder Con Cita
  #4  
Antiguo 12-02-2019
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.927
Poder: 26
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Para este caso es ideal las funciones window:

https://tapoueh.org/blog/2013/08/und...dow-functions/

que están desde sql server 2012:

https://docs.microsoft.com/en-us/sql...ql-server-2017

en especial, creo que te sirve un "moving average".
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 12-02-2019
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 18
look Va camino a la fama
Cita:
Empezado por mamcx Ver Mensaje
Para este caso es ideal las funciones window:

https://tapoueh.org/blog/2013/08/und...dow-functions/

que están desde sql server 2012:

https://docs.microsoft.com/en-us/sql...ql-server-2017

en especial, creo que te sirve un "moving average".
Gracias amigo, estudiare lo que me pasaste.
tambien, si hechas una mano modificando mi SQL lo agradecere mucho, asi tendre mas clara la idea.

Saludos!
__________________
all your base are belong to us
Responder Con Cita
  #6  
Antiguo 12-02-2019
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 18
look Va camino a la fama
Hola amigos, quiciera agregarle la columna de acumulados, esto es lo que tengo:

Código SQL [-]
  SELECT
  SUPERVIS.COD_ESC,
  SUPERVIS.COD_SUP,
  VENTAS.COD_FAM,
  SUM(VENTAS.CANT * PRODUCTS.PES_VOL) AS TOTAL,
  SUM(VENTAS.CANT * PRODUCTS.PES_VOL) OVER (PARTITION BY VENTAS.COD_FAM) as ACUMULADO
  FROM ZONAS
  INNER JOIN SUCURSALS ON SUCURSALS.COD_ZON = ZONAS.COD_ZON  
  INNER JOIN JEFES ON JEFES.COD_SUC = SUCURSALS.COD_SUC    
  INNER JOIN SUPERVIS ON SUPERVIS.COD_JEF = JEFES.COD_JEF 
  INNER JOIN RUTAS ON RUTAS.COD_SUP = SUPERVIS.COD_SUP 
  INNER JOIN VENTAS ON VENTAS.COD_RUT = RUTAS.COD_RUT
  INNER JOIN PRODUCTS ON PRODUCTS.COD_PROD = VENTAS.COD_PROD
  INNER JOIN FAMILIAS ON FAMILIAS.COD_FAM = VENTAS.COD_FAM
  WHERE 
  DATEPART(MONTH,VENTAS.Fech_fact) = 1
  AND DATEPART(YEAR,VENTAS.Fech_fact) = 2019
  AND SUPERVIS.COD_SUP = 10111 
  AND VENTAS.TIP_DOC NOT IN ( 'z105','z106','z405')
  GROUP BY 
  SUPERVIS.COD_SUP,
  VENTAS.COD_FAM,
  SUPERVIS.COD_ESC

Pero me da error, ¿que podra ser?
__________________
all your base are belong to us
Responder Con Cita
  #7  
Antiguo 12-02-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por look Ver Mensaje
Pero me da error, ¿que podra ser?
¿Qué error?
Responder Con Cita
  #8  
Antiguo 12-02-2019
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 18
look Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Qué error?
Cita:
Mens. 8120, Nivel 16, Estado 1, Línea 6
La columna 'VENTAS.CANT' de la lista de selección no es válida, porque no está contenida en una función de agregado ni en la cláusula GROUP BY.
Mens. 8120, Nivel 16, Estado 1, Línea 6
La columna 'PRODUCTS.PES_VOL' de la lista de selección no es válida, porque no está contenida en una función de agregado ni en la cláusula GROUP BY.
.
:/ ......
__________________
all your base are belong to us

Última edición por Casimiro Notevi fecha: 12-02-2019 a las 23:32:34.
Responder Con Cita
  #9  
Antiguo 12-02-2019
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.927
Poder: 26
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por look Ver Mensaje
Gracias amigo, estudiare lo que me pasaste.
tambien, si hechas una mano modificando mi SQL lo agradecere mucho, asi tendre mas clara la idea.

Saludos!
Y como quieres que lo haga? No tengo los datos iniciales. Si suponemos que el resultado que mostraste esta bien y de hay se hace el filtro, entonces es un subquery, y al menos necesitaríamos los datos en texto.
__________________
El malabarista.
Responder Con Cita
  #10  
Antiguo 06-06-2021
abelg abelg is offline
Miembro
 
Registrado: jul 2004
Posts: 50
Poder: 21
abelg Va por buen camino
Por si aun estas con la duda

Te mando un ejemplo pequeño como podrías plantear la solución.
Código SQL [-]
CREATE TABLE #Ventas
(
  Cod_Sup Varchar(25) not null,
  Cod_Esc Varchar(25) not null,
  Cod_Fam int not null,
  Cod_producto int,
  Cantidad int,
)

CREATE TABLE #Producto
(
  Cod_Preoducto int identity not null,
  Nombre varchar(25) not null,
  Pes_vol money not null
)

INSERT #Producto Values ('xxx', 2360.25)
INSERT #Producto Values ('yyy', 360.25)
INSERT #Producto Values ('zzz', 1560.25)
INSERT #Producto Values ('aaa', 4260.25)

INSERT #Ventas Values('1', '10111', 1, 1, 3)
INSERT #Ventas Values('1', '10111', 1, 1, 5)
INSERT #Ventas Values('1', '10111', 1, 1, 3)

INSERT #Ventas Values('1', '10111', 2, 3, 3)

INSERT #Ventas Values('1', '10111', 3, 1, 5)
INSERT #Ventas Values('1', '10111', 3, 3, 4)
INSERT #Ventas Values('1', '10111', 3, 2, 3)

INSERT #Ventas Values('1', '10111', 4, 3, 5)
INSERT #Ventas Values('1', '10111', 5, 2, 4)
INSERT #Ventas Values('1', '10111', 6, 1, 2)
INSERT #Ventas Values('1', '10111', 7, 1, 2)
INSERT #Ventas Values('1', '10111', 8, 2, 18)
INSERT #Ventas Values('1', '10111', 9, 3, 1)
INSERT #Ventas Values('1', '10111', 10, 2, 13)
INSERT #Ventas Values('1', '10111', 11, 2, 15)
INSERT #Ventas Values('1', '10111', 12, 1, 11)
INSERT #Ventas Values('1', '10111', 13, 3, 12)
INSERT #Ventas Values('1', '10111', 14, 1, 17)
INSERT #Ventas Values('1', '10111', 15, 3, 14)
INSERT #Ventas Values('1', '10111', 16, 1, 12)

SELECT Cod_Esc,
  Cod_Sup,
  Cod_Fam,
  Total
FROM  (SELECT Cod_Esc,
      Cod_Sup,
      Cod_Fam,
      SUM(v.Cantidad * p.Pes_vol) Total,
      (SELECT
        SUM(v1.Cantidad * p1.Pes_vol) TotalT
      FROM #Ventas v1
        INNER JOIN #Producto p1 ON p1.Cod_Preoducto = v1.Cod_producto
      WHERE v1.Cod_Fam <= v.cod_Fam
      GROUP BY v1.Cod_Esc, v1.Cod_Sup
      ) GranTotal 
    FROM #Ventas v
    INNER JOIN #Producto p ON p.Cod_Preoducto = v.Cod_producto
    GROUP BY Cod_Esc, Cod_Sup, Cod_Fam
    ) x
WHERE x.GranTotal <= 75000
ORDER BY Cod_Esc, Cod_Sup, Cod_Fam


DROP TABLE #Producto
DROP TABLE #Ventas

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Si Factura Cancelada Total Igual A 0 JXJ Firebird e Interbase 4 28-08-2012 00:22:25
Mostrar valor X y Y en punto dónde clico en chart vivamotos C++ Builder 2 15-12-2011 16:59:48
Numero Mayor igual , Menor igual... Problema ZiriusB OOP 12 27-06-2011 18:31:24
Eliminar de un Select registros con valor de un campo igual danilo_candales SQL 3 15-01-2008 16:32:55
Donde se almacena el valor MAX ilichhernandez SQL 5 17-08-2007 00:18:05


La franja horaria es GMT +2. Ahora son las 01:31:36.


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
Copyright 1996-2007 Club Delphi