Autor Tema: Ayuda con Consulta SQLServer - Agrupando bloques de Correlativos  (Leído 4561 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado wsantos

  • Trade Count: (0)
  • MiembrosReales
  • *
  • Thank You
  • -Given: 0
  • -Receive: 1
  • Mensajes: 25
Buen Dia a Todos.

Necesito que x favor me ayuden con la suiguente consulta sql.

Necesito agrupar bloques de correlativos, como asi,
expongo la informacion de los datos y el Resultado que espero.

NOTA: Esto tiene que ser en una consulta SQL.(depreferencia SQLServer)

Datos ACTUALES:
---------------------------
Fecha     NUMERO   MONTO
07/10/2011       1   10.00
07/10/2011       2     8.00
07/10/2011       3   12.00
07/10/2011       4     5.00
07/10/2011       5     6.00

08/10/2011       6   11.00
08/10/2011       7   14.00
08/10/2011       8     7.00
08/10/2011      10    9.00

09/10/2011       9    15.00
09/10/2011      11     3.00
09/10/2011      12   20.00
09/10/2011      13     3.00
09/10/2011      14   11.00
09/10/2011      15     4.00
09/10/2011      17     7.00

RESULTADO ESPERADO:
---------------------------
FECHA       DESDE_HASTA   MONTO
07/10/2011            1-5        41.00
08/10/2011            6-8        32.00
08/10/2011          10-10        9.00
09/10/2011            9-9        15.00
09/10/2011          11-15      41.00
09/10/2011          17-17        7.00

les agradecere x su ayuda.
Saludos.

Desconectado Darkness

  • Trade Count: (3)
  • The Communiter-
  • *
  • Thank You
  • -Given: 65
  • -Receive: 20
  • Mensajes: 2147
  • The Darkness
    • Diseño y Programaciòn Web Profesional
Re: Ayuda con Consulta SQLServer - Agrupando bloques de Correlativos
« Respuesta #1 : noviembre 08, 2011, 08:51:35 am »
Y cual es la consulta que YA tienes... pon muestra del trabajo que has hecho para ayudarte
La Muerte Simplemente es el Despertar de Un Sueño Lleno de Falsedades e hipocrecias.
"Larga Vida Al Heavy Metal"

Iron Maiden Discografia DD

Desconectado wsantos

  • Trade Count: (0)
  • MiembrosReales
  • *
  • Thank You
  • -Given: 0
  • -Receive: 1
  • Mensajes: 25
Re: Ayuda con Consulta SQLServer - Agrupando bloques de Correlativos
« Respuesta #2 : noviembre 08, 2011, 09:04:35 am »
Muy bien Normamente la consulta es la siguente...


SELECT CONVERT(CHAR(10),FECHA,103)Fecha,MIN(Numero)Desde,MAX(Numero)Hasta,SUM(Venta)Monto
FROM Datos GROUP BY FECHA ORDER BY 1


pero esto me agrupa solo el valor minimo y maximo, no asi los saltos de correlativos, ya q en ocasiones no se lleva una secuencia.

Desconectado Darkness

  • Trade Count: (3)
  • The Communiter-
  • *
  • Thank You
  • -Given: 65
  • -Receive: 20
  • Mensajes: 2147
  • The Darkness
    • Diseño y Programaciòn Web Profesional
Re: Ayuda con Consulta SQLServer - Agrupando bloques de Correlativos
« Respuesta #3 : noviembre 08, 2011, 09:11:32 am »
algo asi..

Citar

declare @Desde varchar(10)
declare @Hasta varchar(10)
declare @BreaK int
declare @Pocision int
declare @MaxId int
--declare @Sql varchar(500)

SELECT @BreaK = 5
select @MaxId = (select max(numero) from dbo.prueba1_borrar)
select @Pocision = 1


while @Pocision <= @MaxId
BEGIN
      select @Desde = @Pocision
      select @Hasta = @Pocision + @BreaK

   SELECT Fecha, @Desde,@Hasta ,SUM(Monto)Monto
      FROM dbo.prueba1_borrar
      where numero >= @Desde and numero <= @Hasta
      GROUP BY FECHA ORDER BY 1


set @Pocision = @Pocision + @BreaK
--print(@sql)
 END
GO

Claro que siempre te queda el problema de la agrupacion, el factor de la fecha  :p


Entonces para quitar ese problema simplemente no la incluyas en el select
Citar

declare @Desde varchar(10)
declare @Hasta varchar(10)
declare @BreaK int
declare @Pocision int
declare @MaxId int
--declare @Sql varchar(500)

SELECT @BreaK = 5
select @MaxId = (select max(numero) from dbo.prueba1_borrar)
select @Pocision = 1


while @Pocision <= @MaxId
BEGIN
      select @Desde = @Pocision
      select @Hasta = @Pocision + @BreaK

   SELECT  @Desde,@Hasta ,SUM(Monto)Monto
      FROM dbo.prueba1_borrar
      where numero >= @Desde and numero <= @Hasta
      


set @Pocision = @Pocision + @BreaK
--print(@sql)
 END
GO


y el resultado sera unicamente los grupitos  ohyea:

Citar
                      Monto
---------- ---------- ---------------------------------------
1          6          224.50

(1 row(s) affected)

                      Monto
---------- ---------- ---------------------------------------
6          11         224.50

(1 row(s) affected)

                      Monto
---------- ---------- ---------------------------------------
11         16         334.00

(1 row(s) affected)

                      Monto
---------- ---------- ---------------------------------------
16         21         70.50


Nota: Los montos yo me los invente.... :D
« Última Modificación: noviembre 08, 2011, 10:03:31 am por Darkness »
La Muerte Simplemente es el Despertar de Un Sueño Lleno de Falsedades e hipocrecias.
"Larga Vida Al Heavy Metal"

Iron Maiden Discografia DD

Desconectado Non Servium

  • Trade Count: (0)
  • Sv Member
  • ***
  • Thank You
  • -Given: 6
  • -Receive: 39
  • Mensajes: 426
  • Ilix Punx :)
Re: Ayuda con Consulta SQLServer - Agrupando bloques de Correlativos
« Respuesta #4 : noviembre 08, 2011, 09:30:12 am »
Tu requerimiento es usar PIVOT

SQL PIVOT
♫ Condenados a perder la libertad! Por no acatar las leyes que les asignaron. ♪ ♫
Decididos, decididos a emprender! Un camino largo y duro por no ser esclavos ♫


Watch

Desconectado murraybozinsky

  • Trade Count: (0)
  • Sv Jr.
  • **
  • Thank You
  • -Given: 1
  • -Receive: 1
  • Mensajes: 54
Re: Ayuda con Consulta SQLServer - Agrupando bloques de Correlativos
« Respuesta #5 : noviembre 08, 2011, 09:52:23 am »
La consulta que ya tienes esta bien,
SELECT CONVERT(CHAR(10),FECHA,103)Fecha,MIN(Numero)Desde,MAX(Numero)Hasta,SUM(Venta)Monto
FROM Datos GROUP BY FECHA ORDER BY 1

Pero esto te da como resultado solo 3 Grupos segun Fecha, y el resultado esperado que tu quieres hace otros grupitos en el grupo de fecha 08/10/2011 y 09/10/2011 .

Entonces segun mi opinion debe haber un campo adicional que controle esos grupitos, no se debe ser algo que esta en la tabla y estas ignorando o  debes implementarlo.



Desconectado wsantos

  • Trade Count: (0)
  • MiembrosReales
  • *
  • Thank You
  • -Given: 0
  • -Receive: 1
  • Mensajes: 25
Re: Ayuda con Consulta SQLServer - Agrupando bloques de Correlativos
« Respuesta #6 : noviembre 08, 2011, 11:01:36 am »
Muy bien, gracias x los comentarios.

de hecho la tabla no tiene la forma de controlar los grupos de correlativos.

en un inicio pues la idea era crear un script como lo hace: Darkness.

Pero pense q se podia hacer en una sola consulta...pero creo que no se puede....

El detalle con esto son correlativos de facturas, la cual por error operario(humano) no colocan en secuencia las facturas,
y es aqui donde surgen los saltos de correlativos. Entonces cuando se inicia la revision de facturas se toman x fechas y correlativos desde-hasta y si falta una(factura) de entre esas piensan q hubo en robo, aunque esa factura de descargo el siguente dia.

Espero mas ideas....gracias

Desconectado Non Servium

  • Trade Count: (0)
  • Sv Member
  • ***
  • Thank You
  • -Given: 6
  • -Receive: 39
  • Mensajes: 426
  • Ilix Punx :)
Re: Ayuda con Consulta SQLServer - Agrupando bloques de Correlativos
« Respuesta #7 : noviembre 08, 2011, 11:10:12 am »
Lo q deberian haber hecho en ese sistema es q el correlativo lo genere automáticamente! He aprendido q la intervención humana estropea el sistema y su funcionamiento xD
♫ Condenados a perder la libertad! Por no acatar las leyes que les asignaron. ♪ ♫
Decididos, decididos a emprender! Un camino largo y duro por no ser esclavos ♫


Watch

Desconectado tekun

  • -^- Elite Silver -^-
  • Trade Count: (1)
  • The Communiter-
  • *
  • Thank You
  • -Given: 53
  • -Receive: 101
  • Mensajes: 3212
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: Ayuda con Consulta SQLServer - Agrupando bloques de Correlativos
« Respuesta #8 : noviembre 08, 2011, 01:01:05 pm »
LIBRO DE IVA ?¿?¿?¿



la mejor idea, sería implementar una validacion antes de insertar un registros (trigger) que no permita ingresar un número de factura del cuál hayan numeros posteriores con una fecha menor a la actual..

caso de las fechas 8 y 9 que tienen números 10 y 9 respectivamente.... impidiendo ingresar el nueve la factura con número nueve (valga la redundancia)...... para luego en otro lado se ingresa esa factura como anulada.
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito